我正在处理如下所示的查询:
SELECT * FROM (
SELECT
FDD,
MAUTO,
MMAN
FROM MyTable) T
UNPIVOT ( Value FOR N IN (MAUTO, MMAN)) P
查询返回以下内容,几乎我正在寻找的内容:
FDD Value N
121A 0 MAUTO
121A 20 MMAN
121B 10 MMAN
121C 43 MAUTO
121D 30 MAUTO
如何使用case
语句,而不是返回 MAUTO 或 MMAN ,它返回 0 (如果 MAUTO )和 1 (如果 MMAN )。
该表如下所示:
FDD MAUTO MMAN
121A 0 20
如果有更好的方法,我会全力以赴。
感谢。
答案 0 :(得分:2)
这应该做:
SELECT FDD,
Value,
CASE
WHEN N = 'MAUTO' THEN 0
WHEN N = 'MMAN' THEN 1
END N
FROM ( SELECT FDD,
MAUTO,
MMAN
FROM MyTable) T
UNPIVOT ( Value FOR N IN (MAUTO, MMAN)) P;
但是,更简单的方法是:
SELECT FDD,
MAUTO as Value,
0 N
FROM MyTable
UNION ALL
SELECT FDD,
MMAN as Value,
1 N
FROM MyTableM;
答案 1 :(得分:0)
我会使用CROSS APPLY和VALUES而不是unpivot。它通常表现更好,使用起来更简单。
SELECT FDD,T.Value,T.N
FROM MyTable
CROSS APPLY
(
VALUES
(MAUTO,0)
,(MMAN,1)
) AS T (Value,N)