SQL如何在两个不同的列上产生两个具有两个不同条件的结果

SQL如何在两个不同的列上产生两个具有两个不同条件的结果,sql,sql-server,Sql,Sql Server,我有一个SQL查询 SELECT N2 as DOORS, N2 as WINDOWS FROM DATABASE.dbo.DISTINTAB WHERE numero=45 AND CODEITEM='D' OR CODEITEM='W' 现在它给我带来了两列门,窗,同样的结果 我真正想要的是在DOORS列上只显示代码为“D”的项目,在WINDOWS列上只显示代码为“W”的项目 我如何才能做到这一点?您似乎想要: SELECT numero,

我有一个SQL查询

SELECT N2 as DOORS, N2 as WINDOWS
   FROM DATABASE.dbo.DISTINTAB
        WHERE numero=45
        AND CODEITEM='D' OR CODEITEM='W'
现在它给我带来了两列门,窗,同样的结果

我真正想要的是在DOORS列上只显示代码为“D”的项目,在WINDOWS列上只显示代码为“W”的项目


我如何才能做到这一点?

您似乎想要:

SELECT numero, 
       MAX(CASE WHEN CODEITEM = 'D' THEN N2 END) AS DOORS,
       MAX(CASE WHEN CODEITEM = 'W' THEN N2 END) AS WINDOWS
FROM DATABASE.dbo.DISTINTAB
WHERE numero = 45 AND CODEITEM IN ('D', 'W')
GROUP BY numero; 

您可以在选择时使用案例

SELECT 
  (CASE WHEN codeitem = 'D' THEN N2 ELSE NULL END) AS DOORS, 
  (CASE WHEN codeitem = 'W' THEN N2 ELSE NULL END) AS WINDOWS
FROM DATABASE.dbo.DISTINTAB
WHERE numero = 45 AND codeitem IN ('D', 'W')

您可以使用此查询

用于同一行中显示的结果的聚合函数

SELECT numero, 
       MAX(CASE WHEN CODEITEM = 'D' THEN CODEITEM ELSE '' END ) AS DOORS,
       MAX(CASE WHEN CODEITEM = 'W' THEN CODEITEM ELSE '' END) AS WINDOWS
FROM DISTINTAB
WHERE numero = 45 AND CODEITEM IN ('D', 'W')
GROUP BY numero; 
通常情况下,当numero时,codeitem不定义为唯一:

WITH cte AS 
(
SELECT n2, ROW_NUMBER() OVER (PARTITION BY codeitem ORDER BY NULL) rn
FROM DATABASE.dbo.DISTINTAB
WHERE numero=45
  AND codeitem IN ('D', 'W')
)
SELECT t1.n2 as Doors, t2.n2 as Windows
FROM cte t1
FULL OUTER JOIN cte t2 ON t1.rn= t2.rn
如果上述字段组合定义为唯一,则

SELECT t1.n2 as Doors, t2.n2 as Windows
FROM DATABASE.dbo.DISTINTAB t1
FULL OUTER JOIN DATABASE.dbo.DISTINTAB t2 
    ON t1.numero=45
   AND t2.numero=45
   AND t1.codeitem = 'D'
   AND t2.codeitem = 'W'

向我们展示一些示例表数据和预期结果。作为格式化文本,而不是图像。@Akina谢谢,我已经编辑过了。您将获得2条记录。是的,您可能会获得多条记录,这取决于您的数据。非常感谢。你是最终的解决方案+1.