如何选择item1, item2.... item10
作为一列,其中项的值大于0?
原始数据
Id Party Item_1 Item_2 Item_3 Item_4
1 A 0 500 0 0
2 B 300 0 0 0
3 A 500 0 0 0
4 C 0 0 500 0
5 D 0 300 0 0
6 A 0 0 0 400
7 B 0 0 200 0
我想要这种格式
PARTY ITEM VALUES
A Item_2 500
B Item_1 300
A Item_1 500
C Item_3 500
D Item_2 300
A Item_4 400
B Item_3 200
答案 0 :(得分:0)
使用union all取消数据,并单独选择每列,然后限制项目。
SELECT * FROM (
SELECT #, party, 'item_1' as Item, item as value
FROM Table
UNION ALL
SELECT #, party, 'item_2' as Item, item as value
FROM Table
UNION ALL
SELECT #, party, 'item_3' as Item, item as value
FROM Table
UNION ALL
SELECT #, party, 'item_4' as Item, item as value
FROM Table
...
)
WHERE ITEM > 0
或者,如果我们假设每行只有1列不为零.. 我们可以判断项目编号,然后通过coalese来获取项目(或者如果需要可以再次使用案例)
SELECT #, case when item_1 <> 0 then 'item_1'
when item_2 <> 0 then 'item_2'
when item_3 <> 0 then 'item_3'
when item_4 <> 0 then 'item_4'
.... end as item,
coalesce(item_1, Item_2, Item_3, Item_4,...)
FROM Table
答案 1 :(得分:0)
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(party CHAR(1) NOT NULL
,Item_1 INT NOT NULL
,Item_2 INT NOT NULL
,Item_3 INT NOT NULL
,Item_4 INT NOT NULL
);
INSERT INTO my_table VALUES
('A',0,500,0,0),
('B',300,0,0,0),
('A',500,0 , 0 ,0),
('C',0 ,0 ,500,0),
('D',0 ,300,0 ,0),
('A',0,0,0 ,400),
('B',0,0,200,0);
CREATE TABLE normalised AS
SELECT x.*
FROM
(
SELECT party, 1 item, item_1 val FROM my_table
UNION ALL
SELECT party, 2, item_2 FROM my_table
UNION ALL
SELECT party, 3, item_3 FROM my_table
UNION ALL
SELECT party, 4, item_4 FROM my_table
) x
WHERE val <> 0;
DROP TABLE my_table;
SELECT * FROM normalised;
+-------+------+-----+
| party | item | val |
+-------+------+-----+
| B | 1 | 300 |
| A | 1 | 500 |
| A | 2 | 500 |
| D | 2 | 300 |
| C | 3 | 500 |
| B | 3 | 200 |
| A | 4 | 400 |
+-------+------+-----+
答案 2 :(得分:0)
试试这个:
select party,
case
when Item_1 >0 then 'Item_1'
when Item_2 >0 then 'Item_2'
when Item_3 >0 then 'Item_3'
when Item_4 >0 then 'Item_4'
end as 'Item',
case
when Item_1 >0 then Item_1
when Item_2 >0 then Item_2
when Item_3 >0 then Item_3
when Item_4 >0 then Item_4
end as 'Value'
from my_table
where Item_1 >0 OR Item_2 >0 OR Item_3 >0 OR Item_4 >0;
结果:
的MySQL&GT;选择方,当Item_1> 0然后&#39; Item_1&#39;当Item_2> 0然后&#39; Item_2&#39;当Item_3&gt; 0然后&#39; Item_3&#39;当Item_4&gt; 0然后&#39; Item_4&#39;结束为&#39;项目&#39;,当Item_1> 0时的情况,然后当Item_2> 0时为Item_1,然后当Item_3> 0时为Item_2,然后当Item_4> 0时为Item_3,则Item_4结束为&#39;值&#39;来自my_table,其中Item_1&gt; 0或Item_2&gt; 0或Item_3&gt; 0或Item_4&gt; 0;
+-------+--------+------+
| party | Item | Value |
+-------+--------+------+
| A | Item_2 | 500 |
| B | Item_1 | 300 |
| A | Item_1 | 500 |
| C | Item_3 | 500 |
| D | Item_2 | 300 |
| A | Item_4 | 400 |
| B | Item_3 | 200 |
+-------+--------+------+
7 rows in set (0.00 sec)