【发布时间】:2014-02-07 09:45:03
【问题描述】:
我在 TEST 表中有以下示例数据:
CREATE TABLE TEST(
f1 varchar(50) NULL,
f2 varchar(50) NULL,
flag int NULL);
INSERT INTO [test]([f1],[f2],[flag]) VALUES('P','a',1);
INSERT INTO [test]([f1],[f2],[flag]) VALUES('P','b',0);
INSERT INTO [test]([f1],[f2],[flag]) VALUES('Q','c',1);
INSERT INTO [test]([f1],[f2],[flag]) VALUES('Q','d',0);
INSERT INTO [test]([f1],[f2],[flag]) VALUES('R','e',1);
INSERT INTO [test]([f1],[f2],[flag]) VALUES('S','f',0);
我想要这个结果:
f1 f2whenFlagIs1 f2whenFlagIs0
P a b
Q c d
R e NULL
S NULL f
已编写以下查询以获得相同的结果:
SELECT isnull(test1.f1,test0.f1) f1, test1.f2 f2whenFlagIs1 , test0.f2 AS f2whenFlagIs0
FROM
(select * from test where flag = 1) AS test1 full JOIN
(select * from test where flag = 0) AS test0
ON test1.f1 = test0.f1
有什么办法可以避免子查询?
【问题讨论】:
-
+1 样本数据和想要的结果!大多数问题都没有提供,没关系。
-
@abdkok: 你在 (
f1,flag) 列上有主键/唯一约束/唯一索引吗? -
我删除了Oracle标签,因为这个语法是SQL Server。
标签: sql-server subquery pivot query-performance