Sql server 此SQL语句中带有UNPIVOT的用例语句?

Sql server 此SQL语句中带有UNPIVOT的用例语句?,sql-server,sql-server-2008,tsql,Sql Server,Sql Server 2008,Tsql,我正在处理一个如下所示的查询: SELECT * FROM ( SELECT FDD, MAUTO, MMAN FROM MyTable) T UNPIVOT ( Value FOR N IN (MAUTO, MMAN)) P FDD MAUTO MMAN 121A 0 20 查询返回以下内容,这几乎就是我要查找的内容: FDD Value N 121A 0 MAUTO 121A 20 MMAN 121B 1

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

SELECT * FROM (
SELECT 
FDD, 
MAUTO,
MMAN
FROM MyTable) T
UNPIVOT ( Value FOR N IN (MAUTO, MMAN)) P
FDD    MAUTO    MMAN
121A   0        20
查询返回以下内容,这几乎就是我要查找的内容:

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)

该表如下所示:

SELECT * FROM (
SELECT 
FDD, 
MAUTO,
MMAN
FROM MyTable) T
UNPIVOT ( Value FOR N IN (MAUTO, MMAN)) P
FDD    MAUTO    MMAN
121A   0        20
如果有更好的办法,我洗耳恭听

谢谢。

这应该可以:

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;
这应该做到:

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;

我将使用值交叉应用,而不是取消应用。它通常性能更好,使用更简单

SELECT FDD,T.Value,T.N
FROM MyTable
CROSS APPLY 
(
    VALUES
    (MAUTO,0)
    ,(MMAN,1)
) AS T (Value,N)

我将使用值交叉应用,而不是取消应用。它通常性能更好,使用更简单

SELECT FDD,T.Value,T.N
FROM MyTable
CROSS APPLY 
(
    VALUES
    (MAUTO,0)
    ,(MMAN,1)
) AS T (Value,N)

谢谢你的回答。但在这两个查询中,我都看不到实际值,即MAUTO或MMAN列中的值。@rbhatup您是否尝试过它们?因为第二个查询直接使用了
MAUTO
MMAN
列,所以不可能您没有得到这些值,我确实尝试了这两个列,第二个行得通,但是我更喜欢使用case语句的语句。@rbhatup我刚刚更新了我的答案,所以现在你有了答案的第一个tooThanks的值。但在这两个查询中,我都看不到实际值,即MAUTO或MMAN列中的值。@rbhatup您是否尝试过它们?因为第二个查询直接使用了
MAUTO
MMAN
列,所以不可能您没有得到这些值,我确实尝试了这两个列,第二个行得通,但是我更喜欢使用case语句的语句。@rbhatup我刚刚更新了我的答案,所以现在你也有了第一个的值