here的下一步:
在Informix数据库(无枢轴选项)上,我正在搜索使用SQL转换以下表的动态方法:
第一张表:“目录”
book | info | value ----------------------------- Moby Dick | price | high Moby Dick | stock | few Hamlet | price | low Hamlet | stock | many Faust | price | medium Faust | stock | normal
第二张表:“艺术家”
book | author ------------------------------------------ Moby Dick | Herman Melville Hamlet | William Shakespeare Faust | Johann Wolfgang von Goethe
我想要实现的结果表:
book | price | stock | author ------------------------------------------------------------- Moby Dick | high | low | Herman Melville Hamlet | low | high | William Shakespeare Faust | medium | normal | Johann Wolfgang von Goethe
到目前为止,我想到的代码到达结果表如下所示。
结合两个表:
SELECT T1.book, T1.info, T1.value, T2.book, T2.author FROM catalog T1, artists T2 WHERE T1.book=T2.book
将行转换为列:
SELECT book, MAX(CASE WHEN info = 'price' THEN value END) as price, MAX(CASE WHEN info = 'stock' THEN value END) as stock FROM catalog GROUP BY book
但不幸的是,我无法将这两者结合起来。
感谢您的帮助!
答案 0 :(得分:2)
SELECT T1.book,
MAX(CASE WHEN info = 'price' THEN value END) as price,
MAX(CASE WHEN info = 'stock' THEN value END) as stock,
MAX(T2.author) as author
FROM catalog T1
JOIN artists T2
ON T1.book = T2.book
GROUP BY T1.book;
<强>输出强>
| book | price | stock | author |
|-----------|--------|--------|----------------------------|
| Faust | medium | normal | Johann Wolfgang von Goethe |
| Hamlet | low | many | William Shakespeare |
| Moby Dick | high | few | Herman Melville |
答案 1 :(得分:1)
一种方法是在执行join
之前进行聚合,如下所示:
select a.book, c.price, c.stock, a.author
from artists a left join
(select c.book,
max(case when info = 'price' then value end) as price,
max(case when info = 'stock' then value end) as stock
from catalog c
group by c.book
) c
on a.book = c.book;
或者,您可以先join
再聚合:
SELECT a.book,
MAX(CASE WHEN c.info = 'price' THEN c.value END) as price,
MAX(CASE WHEN c.info = 'stock' THEN c.value END) as stock,
a.author
FROM catalog c JOIN
artists a
ON c.book = a.book
GROUP BY a.book, a.author;