多个select语句合并为一个,创建新的列

3

我已经到处搜索,似乎找不到解决方案。

现在我知道UNION的功能,但我不确定它在这里是否被正确使用。以下是我的查询:

  SELECT pos.pdPosition AS [Region 1]  
  FROM PositionData pos 
  WHERE pos.PositionId = 1765
  UNION ALL 
  SELECT pos.pdPosition AS [Region 2] 
  FROM PositionData pos 
  WHERE pos.PositionId = 1767

我希望它创建新列,Region 1 包含数字1的数据,Region 2 包含数字2的数据。
我得到的是这个: enter image description here 如何拆分它/可以使用什么语句?
注意:这必须是一个 select 语句。
2个回答

9
Select 
    (SELECT pos.pdPosition 
     FROM PositionData pos 
     WHERE pos.PositionId = 1765) AS [Region 1]
   ,(SELECT pos.pdPosition 
     FROM PositionData pos 
     WHERE pos.PositionId = 1767) AS [Region 2]

6
尝试这个——
DDL:
DECLARE @PositionData TABLE (PositionId INT, pdPosition INT)
INSERT INTO @PositionData (PositionId, pdPosition)
VALUES (1765, 1765),(1767, 1767), (1768, 1768)

我的问题:

SELECT
      [Region 1] = MIN(CASE WHEN PositionId = 1765 THEN pdPosition END)
    , [Region 2] = MIN(CASE WHEN PositionId = 1767 THEN pdPosition END) 
FROM @PositionData
WHERE PositionId IN (1767, 1765)

bummi查询:

SELECT 
    (SELECT pdPosition 
     FROM @PositionData 
     WHERE PositionId = 1765) AS [Region 1]
   ,(SELECT pdPosition 
     FROM @PositionData 
     WHERE PositionId = 1767) AS [Region 2]

输出:

Region 1    Region 2
----------- -----------
1765        1767

(1 row(s) affected)

Region 1    Region 2
----------- -----------
1765        1767

(1 row(s) affected)

查询成本:

cost


再说一遍,这不应该是类似于 (Case when PositionId = 1765 then pdPosition End) 的东西吗? - Snow Blind
请将 CASE WHEN pdPosition 转换为 CASE WHEN PositionId,并将 WHERE pdPosition IN 转换为 WHERE PositionId IN - Snow Blind
为什么我需要这样做? :) - Devart
请仔细查看OP和@bummi的查询:它们都是通过PositionId进行过滤,而不是pdPosition - Snow Blind
@Snow Blind,我的观点没有改变 - 请查看执行计划。 - Devart
我不是在谈论性能,而是在谈论你的SQL中错误的过滤。但是你最后一次编辑已经纠正了它,+1感谢你的努力。 - Snow Blind

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接