Note that there are some explanatory texts on larger screens.

plurals
  1. POSQL Server query that contains a derived table
    primarykey
    data
    text
    <p>I have created a select query that contains one regular table and two derived tables (subqueries). The derived tables are both joined with the regular table with left joins. The regular table contains over 7000 rows, but the query output is around 3000 rows. It has to be equal to the number of records in the regular table. What is my mistake?</p> <pre><code>SELECT T0.[ItemCode], T0.[ItemName], CASE T0.[PrcrmntMtd] WHEN 'B' THEN 'Inkoop' ELSE 'Productie' END AS Verwervingsmethode, T0.[OnHand] AS Voorraad_excl_grondstof_reeds_verwerkt, T1.[Reeds_geproduceerd] AS Grondstof_reeds_verwerkt, CASE WHEN T1.[Reeds_geproduceerd] IS NULL THEN T0.[OnHand] ELSE T0.[OnHand]-T1.[Reeds_geproduceerd] END AS Voorraad_incl_grondstof_reeds_verwerkt, T2.[Nog_te_produceren] AS Geplande_productie_halffabrikaat_eindproduct, T1.[Nog_te_produceren] AS Gereserveerd_voor_productie_grondstof_halffabrikaat, CASE WHEN T1.[Reeds_geproduceerd] IS NULL THEN (T0.[OnHand]/T2.[Nog_te_produceren])*30 ELSE ((T0.[OnHand]-T1.[Reeds_geproduceerd])/T2.[Nog_te_produceren])*30 END AS Dagen_voorraad_halffabrikaat_eindproduct, CASE WHEN T1.[Reeds_geproduceerd] IS NULL THEN (T0.[OnHand]/T1.[Nog_te_produceren])*30 ELSE ((T0.[OnHand]-T1.[Reeds_geproduceerd])/T1.[Nog_te_produceren])*30 END AS Dagen_voorraad_grondstof_halffabrikaat FROM OITM T0 LEFT JOIN ( SELECT T1.[ItemCode], SUM(T0.[PlannedQty]*T1.[BaseQty]) AS Geplande_productie, CASE WHEN SUM(T0.CmpltQty) IS NULL THEN SUM(T0.[PlannedQty]*T1.[BaseQty]) ELSE SUM(T0. [CmpltQty]*T1.[BaseQty]) END AS Reeds_geproduceerd, CASE WHEN SUM(T0.CmpltQty) IS NULL THEN SUM(T0.[PlannedQty]*T1.[BaseQty]) ELSE SUM(T0.[PlannedQty]*T1.[BaseQty])-SUM(T0.[CmpltQty]*T1.[BaseQty]) END AS Nog_te_produceren FROM OWOR T0 INNER JOIN WOR1 T1 ON T0.DocEntry = T1.DocEntry WHERE T0.DueDate &lt;= getdate()+30 AND (T0.[Status] LIKE 'p' OR T0.[Status] LIKE 'r') GROUP BY T1.[ItemCode] ) AS T1 ON T0.ItemCode = T1.ItemCode LEFT JOIN ( SELECT T0.[ItemCode], SUM(T0.[PlannedQty]) AS Geplande_productie, SUM(T0.[CmpltQty]) AS Reeds_geproduceerd, SUM(T0.[PlannedQty])-SUM(T0.[CmpltQty]) AS Nog_te_produceren FROM OWOR T0 INNER JOIN WOR1 T1 ON T0.DocEntry = T1.DocEntry WHERE T0.DueDate &lt;= getdate()+30 AND (T0.[Status] LIKE 'p' OR T0.[Status] LIKE 'r') GROUP BY T0.[ItemCode] ) AS T2 ON T0.ItemCode = T2.ItemCode </code></pre> <p>I mentioned all the where clauses. If I red the linked page correct, that cant be the problem.</p> <p>I also changed the table names and column names of the derived tables. Now all table names and column names are unique.</p> <p>But still the same problem. When i delete the last two case statements in select, i do get all the output lines, but i dont see any problems in these case statements.</p> <pre><code>SELECT T0.[ItemCode], T0.[ItemName], CASE T0.[PrcrmntMtd] WHEN 'B' THEN 'Inkoop' ELSE 'Productie' END AS Verwervingsmethode, T0.[OnHand] AS Voorraad_excl_grondstof_reeds_verwerkt, T3.[Reeds_geproduceerd_grond] AS Grondstof_reeds_verwerkt, CASE WHEN T3.[Reeds_geproduceerd_grond] IS NULL THEN T0.[OnHand] ELSE T0.[OnHand]-T3.[Reeds_geproduceerd_grond] END AS Voorraad_incl_grondstof_reeds_verwerkt, T6.[Nog_te_produceren_eind] AS Geplande_productie_halffabrikaat_eindproduct, T3.[Nog_te_produceren_grond] AS Gereserveerd_voor_productie_grondstof_halffabrikaat, CASE WHEN T3.[Reeds_geproduceerd_grond] IS NULL THEN 30*(T0.[OnHand]/T6.[Nog_te_produceren_eind]) ELSE 30*((T0.[OnHand]-T3.[Reeds_geproduceerd_grond])/T6.[Nog_te_produceren_eind]) END AS Dagen_voorraad_halffabrikaat_eindproduct, CASE WHEN T3.[Reeds_geproduceerd_grond] IS NULL THEN 30*(T0.[OnHand]/T3.[Nog_te_produceren_grond]) ELSE 30*((T0.[OnHand]-T3.[Reeds_geproduceerd_grond])/T3.[Nog_te_produceren_grond]) END AS Dagen_voorraad_grondstof_halffabrikaat FROM OITM T0 LEFT JOIN ( SELECT T2.[ItemCode] AS ItemCode_grond, SUM(T1.[PlannedQty]*T2.[BaseQty]) AS Geplande_productie_grond, CASE WHEN SUM(T1.CmpltQty) IS NULL THEN SUM(T1.[PlannedQty]*T2.[BaseQty]) ELSE SUM(T1.[CmpltQty]*T2.[BaseQty]) END AS Reeds_geproduceerd_grond, CASE WHEN SUM(T1.CmpltQty) IS NULL THEN SUM(T1.[PlannedQty]*T2.[BaseQty]) ELSE SUM(T1.[PlannedQty]*T2.[BaseQty])-SUM(T1.[CmpltQty]*T2.[BaseQty]) END AS Nog_te_produceren_grond FROM OWOR T1 INNER JOIN WOR1 T2 ON T1.DocEntry = T2.DocEntry WHERE T1.DueDate &lt;= getdate()+30 AND (T1.[Status] LIKE 'p' OR T1.[Status] LIKE 'r') GROUP BY T2.[ItemCode] ) AS T3 ON T0.ItemCode = T3.ItemCode_grond LEFT JOIN ( SELECT T4.[ItemCode] AS ItemCode_eind, SUM(T4.[PlannedQty]) AS Geplande_productie_eind, SUM(T4.[CmpltQty]) AS Reeds_geproduceerd_eind, SUM(T4.[PlannedQty])-SUM(T4.[CmpltQty]) AS Nog_te_produceren_eind FROM OWOR T4 INNER JOIN WOR1 T5 ON T4.DocEntry = T5.DocEntry WHERE T4.DueDate &lt;= getdate()+30 AND (T4.[Status] LIKE 'p' OR T4.[Status] LIKE 'r') GROUP BY T4.[ItemCode] ) AS T6 ON T0.ItemCode = T6.ItemCode_eind </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload