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我刚刚更新了我的答案,所以现在你也有了第一个的值