如果要在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 BYORDER 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 Pivot

在 DataGridView 的同一列上添加多个数据源

计算列上的 T-SQL 列别名 - 列名无效

从 T-SQL 导出到 Excel 的问题,包括列名和未导出的列上的排序

如果 lat/lng 为空,要在 lat/lng 数据库字段中添加啥?

重新启动 T-SQL 中的行号 [重复]