2014-10-22 110 views
0

你好,我在SQL Server很新,我的家庭工作有一个问题,这是我的工作,这是我在家庭工作的最后一个问题,出于某种原因,我在最后一个问题上挣扎着。联盟声明加入同一表中的两列

的问题是这样的:

使用UNION运算符来产生一个结果集由来自Orders表三列: 包含交运或不发货 的OrderID值ShipStatus计算列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'

我不想确切的答案,因为我想弄明白,但在正确的方向轻推将不胜感激!

更新---------

嘿家伙感谢您的帮助! 与大家的帮助我想出了它。

这是最后工作的代码。联盟内

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;

回答

0

仅供参考SELECT语句必须具有相同的列数。这些列也必须具有相似的数据类型。另外,每个SELECT语句中的列必须以相同的顺序排列。

所以我想你需要的东西lyk这个。但我dono什么是在这里工会的使用!

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

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

if (condition) 
begin 

select statement *** 

end 

你想要做的是where子句。

联合加入两个选择不同的值只。哪些将适用于shiped而不是shiped价值。

所以,你先为Shiped做第一个表,然后再为Not Shiped做第二个表,然后将这两个表与联合组合起来。

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; 
+0

嗯,我修改它看起来像这样。 'SELECT并按ShipDate AS ShipStatus,订单ID,订购日期 FROM订单 WHERE并按ShipDate IS NOT NULL = '发货' UNION SELECT并按ShipDate AS ShipStatus,订单ID,订购日期 FROM订单 WHERE并按ShipDate IS NULL = '不发货';' 我需要的是列OrderID,OrderDate,然后我需要另一列表示OrderStatus,如果值是NULL,那么它应该说NOT SHIPPED,如果该值不是NULL,那么它需要输出为SHIPPED。 我得到的NULL的方式或不空值如果从ShipDate列 – jfritts6524 2014-10-22 02:30:37

+0

我终于明白了。 此代码最终输出了我正在寻找的结果。 '选择的OrderID,订购日期, '已装船' AS ShipStatus 从接单 WHERE UNION SELECT订单ID,订购日期, '不发货' AS ShipStatus 从接单 WHERE并按ShipDate IS NULL并按ShipDate IS NOT NULL;' – jfritts6524 2014-10-22 02:44:18