Comment afficher l'exécution des commands dans une requête SQL Server 2008

J'essaie de find un moyen sur une database SQL Server 2008 pour exécuter une table de command client et get une request ouverte pour une pièce, la order à la date d'échéance, puis examiner une table de commands et remplir les commands client par PO, order la fourniture de PO par date d'échéance également. Dans le même time, j'ai besoin de montrer quels PO (s) remplissent la command.

Par exemple:

SO table

 SO# DueDate Part Number Required QTY --------------------------------------------- 100 9/3/16 1012 2 101 9/12/16 1012 1 107 10/11/16 1012 4 103 10/17/16 1012 7 

Table PO :

 PO# DueDate Part Number Ordered QTY -------------------------------------------- 331 9/1/16 1012 1 362 9/2/16 1012 1 359 9/24/16 1012 5 371 10/1/16 1012 3 380 10/10/16 1012 10 

Avec ces données, j'aimerais voir ce résultat:

 SO# DueDate Part Number Required QTY PO number QTY Used QTY Remain -------------------------------------------------------------------------- 100 9/3/16 1012 2 331 1 0 100 9/3/16 1012 1 362 1 0 101 9/12/16 1012 1 359 1 4 107 10/11/16 1012 4 359 4 0 103 10/17/16 1012 7 371 3 0 103 10/17/16 1012 7 380 4 6 

J'ai déjà effectué ce process de traitement des commands, mais pas au sharepoint décomposer les bons de command qui remplissent la command, mais au sharepoint faire la sum de toutes les fournitures ouvertes, puis de passer et de soustraire l'offre de chaque command get un solde courant de l'offre à gauche.

Merci d'avance pour votre aide.

J'ai trouvé une solution un peu bizarre, j'espère que ça t'aidera. Peut-être que plus tard, je pourrais l'optimiser, mais maintenant je l'affiche en l'état:

 ;WITH cte AS ( SELECT 1 as l UNION ALL SELECT l+1 FROM cte WHERE l <= 1000000 ), SO_cte AS ( SELECT *, ROW_NUMBER() OVER (ORDER BY DueDate ASC) as rn FROM SO s CROSS JOIN cte c WHERE cl <= s.[Required QTY] ), PO_cte AS ( SELECT *, ROW_NUMBER() OVER (ORDER BY DueDate ASC) as rn FROM PO p CROSS JOIN cte c WHERE cl <= p.[Ordered QTY] ), almost_done AS ( SELECT DISTINCT s.SO#, s.DueDate, s.[Part Number], p.PO#, s.[Required QTY], p.[Ordered QTY] FROM SO_cte s LEFT JOIN PO_cte p ON p.rn = s.rn ), final AS ( SELECT *, ROW_NUMBER() OVER (ORDER BY DueDate) AS RN FROM almost_done ) SELECT f.SO#, f.DueDate, f.[Part Number], f.[Required QTY], f.PO#, CASE WHEN f.[Ordered QTY]>f.[Required QTY] THEN ISNULL(ABS(f1.[Required QTY]-f1.[Ordered QTY]),f.[Required QTY]) ELSE f.[Ordered QTY] END as [QTY Used], f.[Ordered QTY] - CASE WHEN f1.PO# = f.PO# THEN f1.[Ordered QTY] ELSE CASE WHEN f.[Ordered QTY]>f.[Required QTY] THEN ISNULL(ABS(f1.[Required QTY]-f1.[Ordered QTY]),f.[Required QTY]) ELSE f.[Ordered QTY] END END as [QTY Remain] FROM final f LEFT JOIN final f1 ON f.RN = f1.RN+ 1 AND (f.SO# = f1.SO# OR f.PO# = f1.PO#) OPTION(MAXRECURSION 0) 

Sortie pour datatables que vous avez fournies:

 SO# DueDate Part Number Required QTY PO# QTY Used QTY Remain 100 2016-09-03 1012 2 331 1 0 100 2016-09-03 1012 2 362 1 0 101 2016-09-12 1012 1 359 1 4 107 2016-10-11 1012 4 359 4 0 103 2016-10-17 1012 7 371 3 0 103 2016-10-17 1012 7 380 4 6