Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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,我需要一个解决以下问题的方案 我有一个带有列的temp表:a、b、c、d,数据如下所示: 工作台温度 查询 上面的查询提供了多个值为空的行,其中值不存在 我需要一个包含一行的结果集,如下所示: 预期结果 这样做(使用CTE) 查询 请告诉我它是否有效 您能告诉我们预期输出背后的逻辑吗?您最好使用基于c=1的派生表,然后使用基于d的pivot函数,通过aI对结果进行分组,而不需要多行。所以我期待它与单排。我需要此结果集来检查验证t-sql过程您使用了top 1,这可能会为示例提供正确的结果,但

我需要一个解决以下问题的方案

我有一个带有列的temp表:
a、b、c、d
,数据如下所示:

工作台温度 查询 上面的查询提供了多个值为空的行,其中值不存在

我需要一个包含一行的结果集,如下所示:

预期结果 这样做(使用CTE)

查询


请告诉我它是否有效

您能告诉我们预期输出背后的逻辑吗?您最好使用基于c=1的派生表,然后使用基于d的pivot函数,通过aI对结果进行分组,而不需要多行。所以我期待它与单排。我需要此结果集来检查验证t-sql过程您使用了top 1,这可能会为示例提供正确的结果,但查询中提到的where条件也很重要..它会起作用,但我不需要为每种情况“选择”。。。你有什么解决办法吗?谢谢Murtaza,但这只是他如何解决问题的一个例子。他将使用的SQL并不准确。。它给出了一个想法我不确定是否还有其他方法我有20个这样的案例陈述。。因此,如果我为每种情况编写select,那么性能将受到影响。。所以我在寻找更好的解决方案。
+---+----+----+----+
|a  |  b |  c |  d |
+===+====+====+====+
| 1 | 1  | 1  |  m |
| 1 | 2  | 1  |  d |
| 1 | 3  | 1  |  w |
| 2 | 1  | 1  |  m |
| 2 | 2  | 1  |  d |
| 2 | 2  | 1  |  w |
+---+----+----+----+ 
SELECT CASE WHEN B=1 AND C=1 THEN D END as T1,
CASE WHEN B=2 AND C=1 THEN D END as T2,
CASE WHEN B=3 AND C=1 THEN D END as T3
FROM TEMP
WHERE A=1
+------+-------+------+
| T1   |   T2  |  T3  |
+======+=======+======+
| m    |   d   |  w   |
+------+-------+------+
    WITH 
    CTE1 as (select top 1 d as T1 from temp where b=1 and c=1),
    CTE2 as (select top 1 d as T2 from temp where b=2 and c=1),
    CTE3 as (select top 1 d as T3 from temp where b=3 and c=1)

    select CTE1.*, CTE2.*, CTE3.*
    FROM CTE1 CROSS JOIN CTE2 CROSS JOIN CTE3