你好我在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;
答案 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结合起来。