2013-03-28 30 views
0
DECLARE @cols AS NVARCHAR(MAX) 
DECLARE @query AS NVARCHAR(MAX) 


select @cols = '[1015],[1060],[1261],[1373]' 

print @cols 



set @query = 'SELECT header, ' + @cols + ' 
       from 
      (
       select product_id, header, value 
       from 
       (
        select 
         cast(product_id as varchar(100))product_id , 
         cast(product_name as varchar(100)) product_name, 
         cast(product_price as varchar(100)) product_price, 
         cast(product_weight as varchar(100))product_weight, 
         cast((select TOP 1 image_name from tblProductImage where tblProductImage.product_id=tblProduct.product_id) as varchar(100)) ProductImage  
        from tblProduct 

       ) p 
       unpivot 
       (
        value 
        for header in (product_name, product_price, product_weight,ProductImage) 
       ) unp 
      ) x 
      pivot 
      (
       max(value) 
       for product_id in (' + @cols + ') 
      ) p ' 

execute(@query) 

我使用上面的查詢和其發電輸出如下靜態列名

enter image description here

現在我的問題是我要的是列名應該是靜態的..因爲目前存在最大到他們的最多5列第一列將是標題,這是OK

但是對於列的其餘部分,我還希望名稱應該像Prodcut1,Product2,Product3和Product4。如果只有三種產品,那麼它也顯示五列,但對於最後一列,所有屬性值應該爲空

+0

因此,您希望產品列名稱爲Product1,Product2,Product3和Product4?由於product_id不會是列標題,您是否需要具有該值的另一​​行? – Taryn

回答

1

如果我正確理解您的問題,那麼當您傳遞特定的product_ids時,您希望列名是Product1Product2

如果這是正確的,那麼您可以通過應用row_number()來創建靜態列名稱。

您的代碼將調整爲如下:

DECLARE @cols AS NVARCHAR(MAX), 
    @query AS NVARCHAR(MAX) 

DECLARE @prods AS NVARCHAR(MAX) 

select @prods = '141,142,143,144' 

set @query = 'SELECT header, Product1, Product2, Product3, Product4 
       from 
       (
       select header, value, 
        ''Product''+cast(row_number() over(partition by header 
                order by header) as varchar(10)) prods 
       from 
       (
        select 
        cast(product_id as varchar(10)) product_id, 
        product_name, 
        cast(product_price as varchar(10)) product_price, 
        product_weight 
        from tblProduct 
        where product_id in ('[email protected]+') 
       ) p 
       unpivot 
       (
        value 
        for header in (product_name, product_price, product_weight, product_id) 
       ) unp 
      ) x 
      pivot 
      (
       max(value) 
       for prods in (Product1, Product2, Product3, Product4) 
      ) p ' 

execute(@query) 

SQL Fiddle with Demo。這給出了結果:

|   HEADER | PRODUCT1 | PRODUCT2 | PRODUCT3 | PRODUCT4 | 
-------------------------------------------------------------- 
|  product_id |  141 |  142 |  143 |  144 | 
| product_name |  A141 |  A144 |  A143 |  A142 | 
| product_price |  300 |  4000 |  5000 |  200 | 
| product_weight | 200gm | 100gm | 400gm | 300gm | 
+0

謝謝!它的作品適合我!真的非常感謝:) – rahularyansharma

+0

@rahularyansharma不客氣!樂於幫助。 – Taryn

+0

是否可以更改標題欄的順序..我想要的產品名稱,產品圖片,價格,重量 – rahularyansharma