SQL如何在两个不同的列上产生两个具有两个不同条件的结果
我有一个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,
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.