如何查询数据库中的表并将其复制到一个表中?

时间:2015-06-08 06:04:37

标签: sql postgresql

我在这种情况下迷失了,非常需要帮助。情况就是这样。我从表中复制数据值,比如table book_book 所以我用:

INSERT INTO book_copy(name,qty,price,year,isbn)
    SELECT bb.name,bb.qty,bb.price,bb.total,bb.year
    FROM book_book bb WHERE ss.name = 'sample PR' and ss.isbn = 'PH019BN'

输出显示的是:

name       |   qty      |    price    | year     |  isbn
sample PR  |    4       |             |          |  PH019BN
sample PR  |            |     20.00   |          |  PH019BN
sample PR  |            |             |    1991  |  PH019BN

但我想要的是将其视为:

name       |   qty      |    price    | year     |  isbn
sample PR  |   4        |     20.00   | 1991     |  PH019BN

非常感谢任何帮助...

2 个答案:

答案 0 :(得分:0)

您正在寻找的是“旋转”。在您的示例数据中,似乎始终填充nameisbn,并且qtypriceyear仅在一行中填充。您可以像以下一样进行转移:

SELECT name, max(qty), min(price), avg(year), isbn
FROM book_book bb 
WHERE name = 'sample PR' and isbn = 'PH019BN'
GROUP BY name, isbn

答案 1 :(得分:0)

您不能对具有NULL值的行执行SUM。因为结果将为NULL,所以添加到NULL的任何内容都将导致NULL。

示例:从dual中选择sum(10 + NULL + NULL)将导致NULL。

你可以试试下面的内容,如果有多行,其中qty列为NOT NULL,则可以通过将它们全部添加来实现:

SELECT bb.name, 
(SELECT SUM(qty) FROM BOOK_BOOK s WHERE s.name = bb.name 
AND s.isbn = bb.isbn and s.qty IS NOT NULL) as QTY ,
(SELECT SUM(price) FROM BOOK_BOOK p WHERE p.name = bb.name 
AND p.isbn = bb.isbn and p.price IS NOT NULL) as price,
(SELECT MAX(year) FROM BOOK_BOOK y WHERE y.name = bb.name 
AND y.isbn = bb.isbn and y.year IS NOT NULL) as year
FROM BOOK_BOOK bb WHERE bb.name = 'sample PR' AND bb.isbn = 'PH019BN'