0

I want to write sql query transpose table from row to column as picture below enter image description here

Thank you very much.

njtd
  • 105
  • 2
  • 7

5 Answers5

2

I am not using exact names of columns but you can try this,

SELECT GOOD2,
       NAME,
       MAX(CASE WHEN [TYPE] = 'BF' THEN VALUE END) BQTY,
       MAX(CASE WHEN [TYPE] = 'RC' THEN VALUE END) BQTY,
       MAX(CASE WHEN [TYPE] = 'ISU' THEN VALUE END) BQTY,
       MAX(CASE WHEN [TYPE] = 'CF' THEN VALUE END) BQTY
FROM   TABLE1
GROUP BY
       GOOD2,
       NAME
Pedram
  • 6,256
  • 10
  • 65
  • 87
Chanukya
  • 5,833
  • 1
  • 22
  • 36
2

With pivoting:

SELECT  Goods_ID, 
        Name, UM, 
        ISNULL([B/F],0) as [B/F], 
        ISNULL([REC],0) as [REC],
        ISNULL([ISU],0) as [ISU],
        ISNULL([C/F],0) as [C/F]
FROM (
    SELECT Goods_ID, Name, UM, [Type], NULLIF([In-Qty],0) as Qty
    FROM YourTable 
    UNION ALL
    SELECT Goods_ID, Name, UM, [Type],NULLIF([Out-Qty],0)
    FROM YourTable 
    UNION ALL
    SELECT Goods_ID, Name, UM, [Type],NULLIF([B-Qty],0)
    FROM YourTable 
    ) as p
PIVOT (
MIN(Qty) FOR [Type] IN ([B/F],[REC],[ISU],[C/F])
) as pvt

Output:

Goods_ID    Name    UM  B/F     REC     ISU     C/F
CH006       CH006   Kg  11648   11648   0       23296
CH007       CH007   Kg  97584   278400  -315006 60978
gofr1
  • 15,741
  • 11
  • 42
  • 52
0

You just want to group by them. Here is a theoretical example:

SELECT * FROM table_name GROUP BY column_name 

(you need to include all columns in the table in the order you want)

Mark Roll
  • 506
  • 3
  • 6
  • 15
0

not tested, but should be something like this...

select goods_id, name, [B/F], REC, ISU, [C/F] from 
    (select goods_id, name, UM, B-Qty from 
    yourtable ) 
    tbl pivot (sum(B-Qty) for UM in ( [B/F], REC, ISU, [C/F] ) 
    as p
chungtinhlakho
  • 870
  • 10
  • 21
0

I would say you need to use PIVOT

See the same question with different requirement and almost all ways to achieve your expected output.

Community
  • 1
  • 1
Pedram
  • 6,256
  • 10
  • 65
  • 87