使用UNPIVOT在此SQL语句中使用case语句?

时间:2016-09-08 19:57:53

标签: sql-server sql-server-2008 tsql

我正在处理如下所示的查询:

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

如果有更好的方法,我会全力以赴。

感谢。

2 个答案:

答案 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)