J'ai datatables suivantes sur un server MSSQL:
Item No_ Unit Of Measure Qty Per Base UoM Rounding Precision 000001 PIECE 1 1.0 000001 PALLET 100 1.0 000001 BOX 12 1.0 000002 KG 1 1.0 000002 TON 1000 0.001
J'essaie d'get la sortie suivante:
Item No_ UoM1 Qty pb UoM1 RP1 UoM2 Qty pb UoM2 RP2 UoM3 Qty pb UoM3 RP3 000001 PIECE 1 1.0 PALLET 100 1.0 BOX 12 1.0 000002 KG 1 1.0 TON 1000 0.0001 NULL NULL NULL
J'ai essayé d'y parvenir en utilisant l'opérateur PIVOT mais cela ne semble pas être correct.
Quelle est la bonne façon d'get la sortie désirée?
Pour une solution générique, vous devez utiliser Dynamic-SQL. Mais vous dites que vous voulez un sharepoint départ, alors je vous en donne un. Vous pouvez utiliser:
LiveDemo
WITH cte AS ( SELECT *, ROW_NUMBER() OVER(PARTITION BY Item_No_ ORDER BY (SELECT 1)) AS rn FROM #mytable ) select Item_No_, max(case when rn = 1 then Unit_Of_Measure end) UoM1, max(case when rn = 1 then Qty_Per_Base_UoM end) [Qty pb UoM1], max(case when rn = 1 then Rounding_Precision end) RP1, max(case when rn = 2 then Unit_Of_Measure end) UoM2, max(case when rn = 2 then Qty_Per_Base_UoM end) [Qty pb UoM2], max(case when rn = 2 then Rounding_Precision end) RP2, max(case when rn = 3 then Unit_Of_Measure end) UoM3, max(case when rn = 3 then Qty_Per_Base_UoM end) [Qty pb UoM3], max(case when rn = 3 then Rounding_Precision end) RP3, max(case when rn = 4 then Unit_Of_Measure end) UoM4, max(case when rn = 4 then Qty_Per_Base_UoM end) [Qty pb UoM4], max(case when rn = 4 then Rounding_Precision end) RP4 from cte group by Item_No_;
Le fait est que si votre nombre d'unités est connu à l'avance, vous pouvez créer des colonnes codées en dur à partir de 1 .. n
.
Pour plus d'informations, searchz Dynamic Pivot plusieurs colonnes . C'est réalisable, mais d'abord essayer de casser cette solution.