2015-05-06 72 views
2

成爲行的值我有以下信息表:更改列的名稱後,他們在UNPIVOT查詢SQLSERVER2008

CREATE TABLE [dbo].[ApprovedPalmsInFarm](
    [id] [int] IDENTITY(1,1) NOT NULL, 
    [FarmID] [nvarchar](10) NOT NULL, 
    [kalas] [int] NULL, 
    [khnizi] [int] NULL 

選擇查詢的默認結果是:

id FarmID  kalas khnizi 
4 12100462 5  0 
5 11520344 3  0 
6 12104277 150  15 

我想要使用Unpivot查詢生成報告,其中的列成爲行值

我的報告查詢是跟隨NG:

SELECT FarmID, PalmsName, Quantity 
FROM [ApprovedPalmsInFarm] 
unpivot 
(
Quantity 
    FOR PalmsName in ([kalas] , [khnizi]) 
) u; 

我的逆透視查詢的結果如下:

FarmID  PalmsName Quantity 
12100462 kalas  5 
12100462 khnizi  0 
11520344 kalas  3 
11520344 khnizi  0 
12104277 kalas  150 
12104277 khnizi  15 

現在的問題是,如何改變PalmsName的值的名字,而他們不理解,他們是列的名稱,所以我想更改名稱爲例如阿拉伯語如下:

خلاص而不是kalas

خنيزي代替khnizi

是有可能改變的列的名稱後,便成了行值?

+0

你想在你的UNPIVOT查詢更改值的名稱?如果是這樣,那麼可以通過將該查詢存儲在臨時表中然後更改「PalmsName」中的名稱值來輕鬆完成此操作。但我猜你想在同一個查詢中完成它? –

+0

是在同一個查詢中,有可能嗎? – amal50

+2

是的,你可以使用CASE語句('CASE PalmsName WHEN'kalas'THEN'خلاص'... END AS'PalmsName''等)。它會有點笨重,但它會起作用。 – Jim

回答

4

我做了一個評論,但我會到這裏所以它格式化把一個更好的答案:

SELECT 
    FarmID, 
    CASE PalmsName 
     WHEN 'kalas' THEN 'خلاص' 
     WHEN 'khnizi' THEN 'خنيزي' 
     ELSE PalmsName END AS 'PalmsName', 
    Quantity 
FROM [ApprovedPalmsInFarm] 
unpivot 
(
Quantity 
    FOR PalmsName in ([kalas] , [khnizi]) 
) u; 
+0

不知道這是可能的樞軸/ unpivot哈哈。 +1時,我得到我的upvote計數補充。 –

+0

它給了我錯誤關鍵字'AS'附近的語法不正確。 – amal50

+0

我除去別的statment和我makde查詢作爲以下 SELECT FarmID, CASE PalmsName WHEN '卡拉斯' THEN N 'خلاص' WHEN 'khnizi' THEN N 'خنيزي' END 數量 FROM [ApprovedPalmsInFarm] unpivot ( Quantity FOR PalmsName in([kalas],[khnizi]) )u; 它工作完美,我真的很感謝你的幫助 – amal50