1

这里承认 SQL 新手,但我正在处理一个请求变得更加复杂的查询。很短的一点是我有一张有几列的桌子。其中之一是日期列。

我正在编写一个查询以返回一组列,并根据日期范围(<=90 天、91-180、180+)添加一个新列。这就是我到目前为止所拥有的。它适用于前 90 个,但我很难嵌套其他选择命令来获取其他数据集。

Select Key, Name, 'C90' as Code
From LD_List
WHERE DATEDIFF(DAY,[LAST_PURCHASE_DATE],GETDATE()) <= 90

我很感激帮助。

4

2 回答 2

1
SELECT Key, Name,
   CASE WHEN DATEDIFF(DAY,[LAST_PURCHASE_DATE],GETDATE()) <= 90 THEN 'C90'
        WHEN DATEDIFF(DAY,[LAST_PURCHASE_DATE],GETDATE()) >= 91 AND DATEDIFF(DAY,[LAST_PURCHASE_DATE],GETDATE()) <= 180 THEN 'C180'
        WHEN DATEDIFF(DAY,[LAST_PURCHASE_DATE],GETDATE()) >= 181 THEN 'C181'
   END AS Code
于 2012-12-20T20:09:52.190 回答
1

如果您使用的是 TSQL、SQL Server 或 MYSQL,您可以使用CASE WHEN: Key 是一个resreved 关键字。所以使用方括号。在我的示例中,我使用了密钥作为 id。

查询:SQL Server 版本:

Select id, Name, 
case when DATEDIFF(DAY,[LAST_PURCHASE_DATE],GETDATE()) <= 90 
Then 'C90' 
when (DATEDIFF(DAY,[LAST_PURCHASE_DATE],GETDATE()) >= 91 
and DATEDIFF(DAY,[LAST_PURCHASE_DATE],GETDATE()) <= 180) 
then 'C180' 
else 'C181' 
end AS Code
From LD_List 

结果:

ID  NAME    CODE
1   john    C181
2   tim     C181
3   jack    C181
4   kate    C181
5   jim     C181
6   ron     C180
7   henry   C180
8   liza    C90

额外的 :)

现在,如果您需要如下所示的数据透视表:检查此 * SQLFIDDLE Demonstration

结果:

CODE    PURCHASERS
C180    ron,henry
C181    john,tim,jack,kate,jim
C90     liza
于 2012-12-20T20:15:46.630 回答