Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 条件检索_Sql_Sql Server - Fatal编程技术网

Sql 条件检索

Sql 条件检索,sql,sql-server,Sql,Sql Server,我有一个现有的冗长查询,检索类似这样的内容(使其看起来更短) 场景: R行可能并不总是有T行。但是,如果每个键都存在T行,则将使用T行 我应该只显示每个键数据的T行。 但是,如果键的T不存在,我应该显示R数据 如何通过查询实现这一点 预期产出: 条件1:我将检索那些存在T的Key 条件2:我将检索那些只有R的键 使用行号和分区,如下所示: 您必须根据自己的要求使用以下两个字段,并根据需要应用于条件: RANK() OVER (Partition BY keyvalue order by CASE

我有一个现有的冗长查询,检索类似这样的内容(使其看起来更短)

场景:
R
行可能并不总是有
T
行。但是,如果每个键都存在
T
行,则将使用
T

我应该只显示每个
数据的
T
行。 但是,如果
键的
T
不存在,我应该显示
R
数据

如何通过查询实现这一点

预期产出:

条件1:我将检索那些存在
T
Key

条件2:我将检索那些只有
R


使用
行号
分区
,如下所示:

您必须根据自己的要求使用以下两个字段,并根据需要应用于条件:

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  
输出:


另一种方法是使用
联合

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');

你能以合适的格式列出“预期输出”吗?答案将根据你的数据和预期结果而有所不同。因此,请提供更多示例数据,包括大多数可能的场景和预期结果。我可以在其中使用我现有的查询吗?我已经使用了你的选项卡,谢谢你现在摆弄它。
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  
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');