通过查询在Sql组中的情况

时间:2018-05-10 13:40:47

标签: sql sql-server tsql

我正在开展一个项目,我想在其中使用Case来计算SQL Server中特定Reference数下的产品价格。下面是我的Sql查询

SELECT
    product AS Products,
    refNum AS Refrence,
    COUNT(id) AS Count 
FROM ProductPriceList 
GROUP BY
    refNum, product

通过Executing Above查询我得到:

Product      Reference   Count
Product1     Ref08       24
Product2     Ref08       7
Product3     Ref07       32
Product2     Ref12       1
Product3     Ref12       18
Product1     Ref07       76  
Product1     Null        56 

任何人都可以指导我如何在Sql查询中使用Case语句并使用group by语句来显示价格以下是这样的:

if count < 10 then price 1
if count > 10 and < 100 then price 2
if count > 100 then price 3

我不想在我的数据库中添加新表。我希望你能理解我的疑问。

提前致谢。

2 个答案:

答案 0 :(得分:1)

这是另一种选择(尽管与现有的不同):

您可以在子查询中使用查询,并在外部使用case

select product,
       --to get NULL values back
       case Reference when 'RefNull' then NULL else Reference end [Reference],
       case when [Count] < 10 then 1
            when [Count] between 10 and 100 then 2
            else 3 end [price]
from (
     SELECT product AS Products,
            --to allow also null values to be grouped
            coalesce(refNum, 'RefNull') AS Refrence,
            COUNT(id) AS Count 
    FROM ProductPriceList 
    GROUP BY coalesce(refNum, 'RefNull'), product
) [a]

答案 1 :(得分:1)

数据集:

Create Table ProductPriceList 
(
 Product varchar(10)
,RefNum CHAR(5)
,Records Int
);

Insert into ProductPriceList
Values
 ('Product1','Ref08',24)
,('Product2','Ref08',7)
,('Product3','Ref07',32)
,('Product2','Ref12',1)
,('Product3','Ref12',18)
,('Product1','Ref07',76)
,('Product1', NULL, 56);

With RCTE AS
(
Select   Product
        ,RefNum
        ,Records
        ,1 RowNo
From ProductPriceList PPL
Union All
Select   Product
        ,RefNum
        ,Records
        ,RowNo + 1
From RCTE R
Where RowNo + 1 < Records
)
Insert Into ProductPriceList (Product, RefNum, Records)
Select Product, RefNum, Records
From RCTE
where Records > 1

查询以获取所需结果:

Select   Product
        ,RefNum 
        ,Case When Count(*) < 10 Then 1
              When Count(*)  Between 10 and 99 then 2
        Else 3 End Price
From ProductPriceList
Group By Product, RefNum

SQL Fiddle