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');