如果要在T-SQL中的多个列上中断数据,请添加Quartiles
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果要在T-SQL中的多个列上中断数据,请添加Quartiles相关的知识,希望对你有一定的参考价值。
我编写了以下查询,以按小时计算患者人口普查的第三个四分位数,并且有效。但是,我希望能够添加星期几,并且仍然会产生相同的结果,以便我可以看到数据如何因小时和星期几而变化。
目前我的结果如下:
Hour 3rd Quartile Census
---------------------------
0 10
1 9
2 8
3 9
4 9
... ...
我希望能够添加DOW,所以它看起来像这样:
DOW Hour 3rd Quartile Census
------------------------------
Fri 0 9
Fri 1 9
Fri 2 8
...
Sat 0 9
Sat 1 10
Sat 2 11
...
我正在努力,因为我不认为我可以分为2个不同的列?我没有正确的SQL Server 2012形式来使用PERCENTILE_CONT
。请指教。
这是我的汇总人口普查数据的查询,并最终添加到第三个四分位数:
--Aggregated Census Table
SELECT
[Hospital],
[Date], [Hour],
SUM(minutes) / 60.0 AS [patientcensus]
INTO
#Temp
FROM
#Observation
GROUP BY
[Hospital], [Date], [Hour]
ORDER BY
[Hospital], [Date], [Hour]
--Do third quartile without DOW
SELECT [Date], [Hour], [patientcensus]
INTO #temp2
FROM #temp
SELECT
[Hour], [patientcensus],
NTILE(100) OVER (PARTITION BY [Hour] ORDER BY [patientcensus] ASC) percentile
INTO
#percentiles
FROM
#temp2
ORDER BY
[Hour], [patientcensus]
SELECT
[Hour],
MIN(patientcensus) as '3rd Quartile Census'
FROM
#percentiles
WHERE
percentile = 75
GROUP BY
[Hour]
答案
这是一个猜测,因为我没有使用四分位函数,但你提到:
我不认为我可以通过2个不同的列进行分区
你错了。 PARTITION BY
和ORDER BY
条款的OVER
部分都接受多个论点。因此,尝试将第二个查询更改为:
SELECT
[Date],[Hour], [patientcensus],
NTILE(100) OVER (PARTITION BY [Date],[Hour] ORDER BY [patientcensus] ASC) percentile
INTO
#percentiles
FROM
#temp2
ORDER BY
[Date],[Hour], [patientcensus]
以上是关于如果要在T-SQL中的多个列上中断数据,请添加Quartiles的主要内容,如果未能解决你的问题,请参考以下文章
从 T-SQL 导出到 Excel 的问题,包括列名和未导出的列上的排序