UNION语句在同一个表中连接两列

时间:2014-10-22 01:23:02

标签: sql sql-server

你好我在SQL Server上很新,而且我的家庭工作遇到了一个问题就是杀了我,这是我家庭工作的最后一个问题,出于某些原因我和# 39; m在最后一个问题上挣扎。

问题是这样的:

  

使用UNION运算符生成包含Orders表中三列的结果集:   ShipStatus包含值为SHIPPED或NOT SHIPPED的计算列   OrderID OrderID列   OrderDate OrderDate列   如果订单在ShipDate列中具有值,则ShipStatus列应包含值SHIPPED。否则,它应包含值NOT SHIPPED。   按OrderDate排序最终结果集。

这是我到目前为止所得到的,但它似乎无法奏效。

SELECT OrderID,OrderDate FROM Orders UNION SELECT ShipDate AS ShipStatus FROM Orders IF ShipDate IS NULL THEN ShipDate = 'Not Shipped' ELSE ShipDate = 'Shipped'

我不想要确切的答案,因为我想弄清楚,但是在正确的方向上轻推会非常感激!

UPDATE ---------

嘿,伙计们感谢您的帮助! 随着每个人的组合帮我解决了。

这是最终工作的代码。

SELECT OrderID, OrderDate, 'SHIPPED' AS ShipStatus FROM Orders WHERE ShipDate IS NOT NULL UNION SELECT OrderID, OrderDate, 'NOT SHIPPED' AS ShipStatus FROM Orders WHERE ShipDate IS NULL;

3 个答案:

答案 0 :(得分:6)

你正在努力解决联盟中每个查询需要相同数量的列的问题。这里有一些SQL(MySQL语法)可以帮助您克服这个障碍。既然您已对我的查询进行了更正,那么这就是订购问题的解决方案:

SELECT OrderID, OrderDate, ShippedStatus FROM
(
    SELECT OrderID, OrderDate, 'SHIPPED' as ShippedStatus
    FROM Orders 
    WHERE ShipDate IS NOT NULL
    UNION
    SELECT OrderID, OrderDate, 'NOT SHIPPED'
    FROM Orders
    WHERE ShipDate IS NULL
) AS myQuery ORDER BY OrderDate;

答案 1 :(得分:0)

UNION中的FYI SELECT语句必须具有相同的列数。列还必须具有类似的数据类型。此外,每个SELECT语句中的列必须具有相同的顺序。

所以我想你需要一些lyk这个。但我不知道工会在这里的用途是什么!!

SELECT orderid, 
       orderdate,
       case 
          when shipdate IS NULL THEN shipdate = 'Not Shipped' 
          ELSE 'shipped' 
       END shipstatus 
FROM   orders 
ORDER BY orderdate

答案 2 :(得分:0)

如果在select语句中没有。您只能在全局声明中使用if。像

if (condition)
begin

select statement ***

end

你想要做的是where子句。

联盟加入两个选择仅用于不同的值。哪个适用于shiped和not shiped价值。

所以你为Shiped做了第一个表,然后是第二个用于非Shiped的表,然后将这两个表与union结合起来。