我有一个这样的表:
id | Type | Date | DocDate
------------------------------
1 | A | 2014-04-05 | 2014-04-05
2 | A | 2014-05-06 | 2014-05-08
3 | B | 2014-06-06 | 2014-06-06
我需要创建一个堆叠条形字符。但是要做到这一点,我需要将我的表转换为:
Type | Green | Red
-----------------------
A | 1 | 1
B | 1 | 0
其中绿色和红色代表以下条件的结果:
IF (DocDate - Date) <= 1 THEN Green
IF (DocDate - Date) > 1 THEN Red
我试过这个查询:
SELECT CASE
WHEN (DocDate - Date) <= 1 THEN 'Green'
WHEN (DocDate - Date) > 1 THEN 'Red'
END AS X, Count(OccurrenceID) AS Total
FROM tbloccurrence
GROUP BY CASE
WHEN (DocDate - Date) <= 1 THEN 'Green'
WHEN (DocDate - Date) > 1 THEN 'Red'
END;
但是结果不是我想要的。谁能帮帮我?
最佳答案
我首先编写了一个查询,从您的表中提取每一行,并分配绿色或红色列。为此,您可以使用 IF()
语句。这需要 3 个参数:一个条件,如果该条件为真,该做什么,如果该条件为假,该做什么。这给了我们这个:
SELECT type, IF(DATEDIFF(docdate, dateCol) <= 1, 1, 0) AS green, IF(DATEDIFF(docdate, dateCol) > 1, 1, 0) AS red
FROM myTable;
我还使用了 DATEDIFF()
函数。这将返回两个参数之间的整数天数(它需要 DATE 或 DATETIME 参数)。
然后,我只是对红色和绿色列求和并按类型分组以匹配您的结果集:
SELECT type, SUM(IF(DATEDIFF(docdate, dateCol) <= 1, 1, 0)) AS green, SUM(IF(DATEDIFF(docdate, dateCol) > 1, 1, 0)) AS red
FROM myTable
GROUP BY type;
这是您的免费SQL Fiddle .
关于MySQL根据两个日期列之间的结果选择行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26594023/