我有一个现有的冗长查询,它检索类似的内容(使它看起来更短)。
Field1 Field2 Key
------ ------ ---
R NULL 2
T CAF21 2
R NULL 1
R NULL 3设想情况:
R行可能并不总是有T行。但是,如果每个键都存在T行,则将使用T行。
我应该只显示每个T数据的Key行。但是,如果T不存在于Key,那么我应该显示R数据。
如何通过查询实现这一点?
预期产出:
条件1:我将检索存在
Key的T
Field1 Field2 Key
------ ------ ---
T CAF21 2条件2:我将检索那些只包含
Key的R
Field1 Field2 Key
------ ------ ---
R NULL 3
R NULL 1发布于 2018-02-01 05:48:22
将ROW_NUMBER与Partition By一起使用如下所示:
您必须为您的需求处理以下两个字段,并根据需要在需要的情况下应用:
RANK() OVER (Partition BY keyvalue order by CASE field1 WHEN 'T' THEN 0 ELSE 1 END) AS PartNo,
CASE field1 WHEN 'T' THEN 1 ELSE 2 END AS fieldValue;整个查询:
DECLARE @tblQuestion AS Table
(
field1 varchar(20),
field2 VARCHAR(50),
keyvalue INT
)
INSERT INTO @tblQuestion VALUES('R',NULL,2)
INSERT INTO @tblQuestion VALUES('T','CAFR',2)
INSERT INTO @tblQuestion VALUES('R',NULL,1)
INSERT INTO @tblQuestion VALUES('R',NULL,3)
;WITH T AS
(
SELECT
field1,
field2,
keyvalue,
ROW_NUMBER() OVER (Partition BY keyvalue order by CASE field1 WHEN 'T' THEN 0 ELSE 1 END) AS PartNo,
CASE field1 WHEN 'T' THEN 1 ELSE 2 END AS fieldValue
FROM @tblQuestion
)
SELECT
*
FROM T 输出:

发布于 2018-02-01 05:56:56
另一种方法是使用UNION
SELECT FIELD1, FIELD2, KEY
FROM YOUR_TABLE
WHERE FIELD1 = 'T'
UNION
SELECT FIELD1, FIELD2, KEY
FROM YOUR_TABLE
WHERE KEY NOT IN (SELECT DISTINCT KEY FROM YOUR_TABLE WHERE FIELD1 = 'T');https://stackoverflow.com/questions/48556044
复制相似问题