我有一些看起来像这样的数据:
Table1
Number TYPE Acct Total
------ --- --- ----
1X2 GGG 111 100
1X2 GGG 222 200
我想要做的是将这些数据转为透视,使其看起来像这样:
Number Type 111 222
----- --- --- ---
1X2 GGG 100 200
以下是我的旋转方式:
Select * from Table1
PIVOT (MAX(Total)
FOR ACCT in ([111],[222],[333])
现在这对于 Acct 111 和 222 非常有效,但对于 333,Total = NULL。事情是这样的,我有时可能拥有所有三个 ACCT,如 111、222 和 333。其他时候如上例所示,其中一个可能会丢失。
任何人,当我进行数据透视时,数据如下所示:
Number Type 111 222 333
----- --- --- --- ---
1X2 GGG 100 200 NULL <-- I'm trying to set this to 0
如您所见,333 的值为 NULL - IS there anyway I can set this value to 0?
答案 0 :(得分:1)
两个选项。第一个将使用 SELECT salary
FROM Employee
WHERE salary < (SELECT MAX(e2.salary) FROM Employee e2)
来消除空值。第二个将通过 coalesce()
和 CROSS JOIN
(蛮力)
示例
UNION ALL
第二个选项:
您可能注意到我在最后一个 Declare @YourTable Table ([Number] varchar(50),[TYPE] varchar(50),[Acct] varchar(50),[Total] varchar(50))
Insert Into @YourTable Values
('1X2','GGG',111,100)
,('1X2','GGG',222,200)
Select Number
,Type
,[111] = coalesce( [111] ,0)
,[222] = coalesce( [222] ,0)
,[333] = coalesce( [333] ,0)
From @YourTable
PIVOT (MAX(Total)
FOR ACCT in ([111],[222],[333])) pvt
中提供了 Accts
,因为 CROSS JOIN
不在示例数据的范围内。如果它存在,您可以使用我们在 Cross Apply 1 和 2 中使用的 333
Select Distinct Acct
两个结果都是