将文本插入SQL SELECT查询行

时间:2014-04-18 20:25:55

标签: sql postgresql

很抱歉,如果已经提出问题。我无法想到我想要做的事情,但在问之前我做了一些Google foo。

在下面的代码中,我正在尝试将UNION添加到选择查询的摘要行。在摘要行的第一列中,我想要文本摘要。我很确定在过去之前我已经这样做了,但是因为postgres认为这是一个无效的int,所以我的生活无法让它工作。

非常感谢任何帮助。

CREATE OR REPLACE VIEW OrderHistory
AS SELECT OrderLine.ShopOrderID, Book.Title, OrderLine.UnitSellingPrice, OrderLine.Quantity,  
SUM(Quantity*UnitSellingPrice) AS total
FROM OrderLine
INNER JOIN Book
ON OrderLine.BookID = Book.BookID
WHERE OrderLine.BookID = 2
GROUP BY OrderLine.ShopOrderID, Book.Title, OrderLine.Quantity, OrderLine.UnitSellingPrice;

SELECT * FROM OrderHistory

UNION SELECT 'Summary', NULL, NULL, SUM(Quantity), SUM(Quantity*UnitSellingPrice) 
FROM OrderHistory
ORDER BY total;

如果这段代码很糟糕,我很抱歉,因为我现在正在努力学习SQL noob,所以可能有一百万种方法更有效地做到这一点。

编辑: 抱歉。应该也应该指出这是我遇到麻烦的这条线:)

UNION SELECT 'Summary', NULL, NULL, SUM(Quantity), SUM(Quantity*UnitSellingPrice) 

2 个答案:

答案 0 :(得分:1)

Postgres可能是对的。

执行UNION时,您尝试联合的列结构必须匹配。 '总结'肯定是char / varchar。我怀疑OrderLine.ShopOrderID是一个整数。没有类型转换,您无法使用同一列来包含这两种类型的数据。我认为唯一可能的类型是OrderLine.ShopOrderID to char / varchar ...有点难看,但可能。

另一个解决方案是在这些前面添加一个char / varchar列...在第一个选择中添加null或空字符串或一些文本常量,并且'摘要'在第二。然后在第二个选择中你还必须在ShopOrderID列中添加NULL ...就像你已经在使用Book.Title和OrderLine.UnitSellingPrice

一样

答案 1 :(得分:1)

试试这个:

CREATE OR REPLACE VIEW OrderHistory
AS SELECT cast(OrderLine.ShopOrderID as varchar(255)) as ShopOrderId, Book.Title, OrderLine.UnitSellingPrice, OrderLine.Quantity,  
SUM(Quantity*UnitSellingPrice) AS total
FROM OrderLine
INNER JOIN Book
ON OrderLine.BookID = Book.BookID
WHERE OrderLine.BookID = 2
GROUP BY OrderLine.ShopOrderID, Book.Title, OrderLine.Quantity, OrderLine.UnitSellingPrice;

SELECT * FROM OrderHistory

UNION SELECT 'Summary', NULL, NULL, SUM(Quantity), SUM(Quantity*UnitSellingPrice) 
FROM OrderHistory
ORDER BY total;

即,将ShopOrderId转换为字符串。