Unpivot和Pivot不返回数据

时间:2015-04-29 12:52:52

标签: pivot unpivot

我试图将数据作为列返回。

我已经编写了这个unpivot和pivot查询:

`select StockItemCode, barcode, barcode2 from (select StockItemCode, col+cast(seq as varchar(20)) col, value   from  (
select 
  (select min(StockItemCode) 
   from RTLBarCode t2
   where t.StockItemCode = t2.StockItemCode) StockItemCode, 
  cast(BarCode as varchar(20)) barcode, 
     row_number() over(partition by StockItemCode order by StockItemCode) seq
from RTLBarCode t) d  unpivot(
value
for col in (barcode)  ) unpiv) src pivot (  max(value)  for col in (barcode, barcode2)) piv;`

但问题只是"条码2"字段返回一个值(条形码字段在实际存在值时返回null。

示例数据

我有一个名为RTLBarCode的表 它有一个名为Barcode的字段和一个名为StockItemCode

的字段

对于StockItemCode = 10我有2行,条形码值为5014721112824和0000000019149。

谁能看到我哪里出错了?

非常感谢

1 个答案:

答案 0 :(得分:0)

您正在将您的条形码编入索引。 这会产生col's值barcode1barcode2

但是你转而使用barcode代替barcode1。找不到任何值,汇总返回null

正确的陈述是:

select StockItemCode, barcode1, barcode2 from 
(
    select StockItemCode, col+cast(seq as varchar(20)) col, value   
    from  
    (
        select 
                (select min(StockItemCode)from RTLBarCode t2 where t.StockItemCode = t2.StockItemCode) StockItemCode,  
                cast(BarCode as varchar(20)) barcode, 
                row_number() over(partition by StockItemCode order by StockItemCode) seq
        from RTLBarCode t
     ) d  
     unpivot(value for col in (barcode)) unpiv
) src 
pivot (max(value) for col in (barcode1, barcode2)) piv