2015-05-06 34 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