SQL表作为矩阵(T-SQL)

SQL表作为矩阵(T-SQL),sql,sql-server,tsql,select,matrix,Sql,Sql Server,Tsql,Select,Matrix,我有一些有趣的复杂谜题,至少对我来说是复杂的。 这就是问题所在 我有一张简单的桌子,看起来像这样 Create table User(UserID int, DaysCount int, Date int) 然后我做了一个简单的选择,基于Daysunt给用户一些从1到4的特定等级,并将其添加到一些临时表中 Select UserID, (case when DaysCount >= 0 and DaysCount <= 10 then 1 when DaysCount >

我有一些有趣的复杂谜题,至少对我来说是复杂的。 这就是问题所在

我有一张简单的桌子,看起来像这样

Create table User(UserID int, DaysCount int, Date int) 
然后我做了一个简单的选择,基于Daysunt给用户一些从1到4的特定等级,并将其添加到一些临时表中

Select UserID, 
(case
when DaysCount >= 0 and DaysCount <= 10 then 1
when DaysCount >= 11 and DaysCount <= 20 then 2
when DaysCount >= 21 and DaysCount <= 30 then 3
when DaysCount >= 31 and DaysCount <= 40 then 4
end) as Grade, Month
Into #A
from Users
where Date = 20150131

Select UserID, 
(case
when DaysCount >= 0 and DaysCount <= 10 then 1
when DaysCount >= 11 and DaysCount <= 20 then 2
when DaysCount >= 21 and DaysCount <= 30 then 3
when DaysCount >= 31 and DaysCount <= 40 then 4
end) as Grade, Month
Into #B
from Users
where Date = 20150228

谢谢你的帮助,如果你不明白我的问题到底是什么,请告诉我

除非我遗漏了什么,否则所有临时表都不是必需的,您可以简单地从
用户
表中将其提取为单个查询,但不要使用返回值介于1和4之间的单个大小写表达式,而是使用返回值为1或0的4个大小写表达式:

SELECT  UserID,
        [1] = CASE WHEN DaysCount >= 0 AND DaysCount <= 10 THEN 1 ELSE 0 END,
        [2] = CASE WHEN DaysCount >= 11 AND DaysCount <= 20 THEN 1 ELSE 0 END,
        [3] = CASE WHEN DaysCount >= 21 AND DaysCount <= 30 THEN 1 ELSE 0 END,
        [4] = CASE WHEN DaysCount >= 31 AND DaysCount <= 40 THEN 1 ELSE 0 END,
        Date 
FROM    Users
WHERE   Date IN ('20150131', '20150228');
选择UserID,

[1] =当dayscont>=0且dayscont=11且dayscont=21且dayscont=31且dayscont=0且dayscont=11且dayscont=21且dayscont=31且dayscont时的情况,因为它们是10的间隔,所以这里有一种较短的写入方法

SELECT  DaysCount, 
        [1] = CASE WHEN dcID <= 1 THEN 1 ELSE 0 END,
        [2] = CASE WHEN dcID  = 2 THEN 1 ELSE 0 END,
        [3] = CASE WHEN dcID  = 3 THEN 1 ELSE 0 END,
        [4] = CASE WHEN dcID  = 4 THEN 1 ELSE 0 END
FROM Users
CROSS APPLY (SELECT CEILING(DaysCount/10.0)) CA(dcID)
WHERE [Date] IN ('20150131', '20150228');
选择daysunt,

[1] =当dcID实际起作用时的情况。。。感谢我们的T-SQL大师!
SELECT  UserID,
        CASE WHEN DaysCount >= 0 AND DaysCount <= 10 THEN 1 ELSE 0 END AS [1],
        CASE WHEN DaysCount >= 11 AND DaysCount <= 20 THEN 1 ELSE 0 END AS [2],
        CASE WHEN DaysCount >= 21 AND DaysCount <= 30 THEN 1 ELSE 0 END AS [3],
        CASE WHEN DaysCount >= 31 AND DaysCount <= 40 THEN 1 ELSE 0 END AS [4],
        Date 
FROM    Users
WHERE   Date IN ('20150131', '20150228');
SELECT  DaysCount, 
        [1] = CASE WHEN dcID <= 1 THEN 1 ELSE 0 END,
        [2] = CASE WHEN dcID  = 2 THEN 1 ELSE 0 END,
        [3] = CASE WHEN dcID  = 3 THEN 1 ELSE 0 END,
        [4] = CASE WHEN dcID  = 4 THEN 1 ELSE 0 END
FROM Users
CROSS APPLY (SELECT CEILING(DaysCount/10.0)) CA(dcID)
WHERE [Date] IN ('20150131', '20150228');