Sql server 2012 按列划分条件计算中值

Sql server 2012 按列划分条件计算中值,sql-server-2012,Sql Server 2012,我需要计算标签为标签的项目的中位数,以及具有类似项目名称(如C、E和F)的组。例如,标签C1、标签C2和标签C3的中位数。其余项目的中位数应根据标签和项目名称计算 Label || Item_Name || Price Tag || Tag C1 || 231 Tag || Tag C2 || 312 Tag || Tag C3 || 416 Tag || Tag E1 || 523 Ta

我需要计算标签为标签的项目的中位数,以及具有类似项目名称(如C、E和F)的组。例如,标签C1、标签C2和标签C3的中位数。其余项目的中位数应根据标签和项目名称计算

Label  ||  Item_Name    ||  Price
Tag    ||  Tag C1       ||   231
Tag    ||  Tag C2       ||   312
Tag    ||  Tag C3       ||   416
Tag    ||  Tag E1       ||   523
Tag    ||  Tag E2       ||   152
Tag    ||  Tag E3       ||   629
Tag    ||  Tag E4       ||   29
Tag    ||  Tag E5       ||   727
Tag    ||  Tag F1       ||   671
Tag    ||  Tag F2       ||   1002
Tag    ||  Tag F3       ||   96
No_Tag ||      G        ||   61
No_Tag ||      H        ||   802
No_Tag ||      H2       ||   36
No_Tag ||      J3       ||   102
No_Tag ||      K        ||   546
No_Tag ||      M        ||   238
下面提到的查询返回整个项目集的中位数

PERCENTILE_CONT(.50) WITHIN GROUP (ORDER BY Price) OVER (PARTITION BY Label) med_price
我也试过用CASE,但结果还是一样

CASE    
    WHEN Item_Name LIKE ('Tag C%') THEN PERCENTILE_CONT(.50) WITHIN GROUP (ORDER BY Price) OVER (PARTITION BY Label)
    WHEN Item_Name LIKE ('Tag E%') THEN PERCENTILE_CONT(.50) WITHIN GROUP (ORDER BY Price) OVER (PARTITION BY Label)
    WHEN Item_Name LIKE ('Tag F%') THEN PERCENTILE_CONT(.50) WITHIN GROUP (ORDER BY Price) OVER (PARTITION BY Label)
    ELSE PERCENTILE_CONT(.50) WITHIN GROUP (ORDER BY Price) OVER (PARTITION BY Label, Item_Name)
END AS med_price,

在标签上进行分区时,如何包含基于项目名称的条件?

您可以使用关于项目名称的case语句-这是一个基于项目名称前五个字符作为标准的建议:

    PERCENTILE_CONT(.50) WITHIN GROUP (ORDER BY Price) OVER (PARTITION BY Label, CASE WHEN Label = 'Tag' THEN Left(Item_Name,5) ELSE Item_Name END) AS Med_Price

非常感谢,简。