更新时间:2023-01-30 08:04:40
由于您要将列转置为行,因此我想您需要一些UNION. 对于每个类别",您可能需要一个不同的查询,对于每个类别,您应该计算每个选项获得多少票.
Because you want to transpose columns to rows, I guess you need a few UNIONs. You would probably need a different query for each "category", and for each category you should count how many votes do they get for each option.
请尝试执行此查询,它应该这样做:
Please try this query out, it should do it:
SELECT MAX('Service') AS Category,
COUNT(CASE WHEN t.Servive = 'Excellent' THEN 1 END) AS Excellent,
COUNT(CASE WHEN t.Servive = 'VeryGood' THEN 1 END) AS Very_Good,
COUNT(CASE WHEN t.Servive = 'Good' THEN 1 END) AS Good,
COUNT(CASE WHEN t.Servive = 'Bad' THEN 1 END) AS Bad,
COUNT(CASE WHEN t.Servive = 'Poor' THEN 1 END) AS Poor
FROM table1 t
WHERE t.Date BETWEEN '2018-03-29' AND '2018-03-29'
UNION
SELECT MAX('Food') AS Category,
COUNT(CASE WHEN t.Food = 'Excellent' THEN 1 END) AS Excellent,
COUNT(CASE WHEN t.Food = 'VeryGood' THEN 1 END) AS Very_Good,
COUNT(CASE WHEN t.Food = 'Good' THEN 1 END) AS Good,
COUNT(CASE WHEN t.Food = 'Bad' THEN 1 END) AS Bad,
COUNT(CASE WHEN t.Food = 'Poor' THEN 1 END) AS Poor
FROM table1 t
WHERE t.Date BETWEEN '2018-03-29' AND '2018-03-29'
UNION
SELECT MAX('Behavior') AS Category,
COUNT(CASE WHEN t.Behavior = 'Excellent' THEN 1 END) AS Excellent,
COUNT(CASE WHEN t.Behavior = 'VeryGood' THEN 1 END) AS Very_Good,
COUNT(CASE WHEN t.Behavior = 'Good' THEN 1 END) AS Good,
COUNT(CASE WHEN t.Behavior = 'Bad' THEN 1 END) AS Bad,
COUNT(CASE WHEN t.Behavior = 'Poor' THEN 1 END) AS Poor
FROM table1 t
WHERE t.Date BETWEEN '2018-03-29' AND '2018-03-29'
UNION
SELECT MAX('Environment') AS Category,
COUNT(CASE WHEN t.Environment = 'Excellent' THEN 1 END) AS Excellent,
COUNT(CASE WHEN t.Environment = 'VeryGood' THEN 1 END) AS Very_Good,
COUNT(CASE WHEN t.Environment = 'Good' THEN 1 END) AS Good,
COUNT(CASE WHEN t.Environment = 'Bad' THEN 1 END) AS Bad,
COUNT(CASE WHEN t.Environment = 'Poor' THEN 1 END) AS Poor
FROM table1 t
WHERE t.Date BETWEEN '2018-03-29' AND '2018-03-29'