【问题标题】:SQL: How to sort values into categories in ssmsSQL:如何在 ssms 中对值进行分类
【发布时间】:2018-06-13 12:17:38
【问题描述】:

我创建查询

SELECT Dt, CustomerName, ItemRelation, SaleCount, 
              DocumentNum, DocumentYear, IsPromo, CustomerType
              FROM [dbo].[promo_data]  where [CustomerType]='XY'

有关于股票的数据[IsPromo](0-没有股票,1是股票) 我怎样才能只选择 CustomerType 的这些 obs XY 动作类别只有一个值 1 = 1

简单例子

[ItemRelation]  [SaleCount] IsPromo ,[DocumentNum]  [DocumentYear]
11203   8,85947691  0   138 2018
11203   9,450108704 0   138 2018
11203   12,40326767 1   138 2018
11202   8,85947691  0   137 2018
11202   9,450108704 0   137 2018
11202   12,40326767 1   137 2018
11202   25,98779894 1   137 2018
11202   63,19760196 1   137 2018

我必须选择

11203       1   138 2018

因为

11202       137 2018

有两个

【问题讨论】:

    标签: sql sql-server ssms


    【解决方案1】:

    你似乎想要:

    SELECT ItemRelation, DocumentNum, DocumentYear, IsPromo
    FROM [dbo].[promo_data]
    WHERE CustomerType = 'XY' AND IsPromo = 1
    GROUP BY ItemRelation, DocumentNum, DocumentYear, IsPromo
    HAVING COUNT(*) = 1;
    

    编辑:

    要检索所有列,请使用窗口函数:

    SELECT *
    FROM (SELECT pd.*,
                 COUNT(*) OVER (PARTITION BY ItemRelation, DocumentNum, DocumentYear, IsPromo) as cnt
          FROM [dbo].[promo_data] pd
          WHERE CustomerType = 'XY' AND IsPromo = 1
         ) pd
    WHERE cnt = 1;
    

    【讨论】:

    • 在这种情况下你真的可以按 SaleCount 分组吗?
    • @JanneP 。 . . OP 没有请求销售计数,所以它根本不应该出现在查询中。
    • @GordonLinoff,必须在查询中返回 SaleCount。如何做到不将其聚合到 GROUP BY
    • @varimax 根据 Gordon Linoff 的原件检查我的答案以返回其他列
    • @varimax 。 . .您的示例结果并不表明您希望在结果集中使用它。
    【解决方案2】:

    根据 Gordon 的回答,如果您想选择未用于分组的其他字段,您可以使用子查询进行自联接,如下所示:

    SELECT pd.Dt, pd.CustomerName, pd.ItemRelation, pd.SaleCount, 
                  pd.DocumentNum, pd.DocumentYear, pd.IsPromo, pd.CustomerType 
    FROM [dbo].[promo_data] pd
    INNER JOIN(
      SELECT ItemRelation, DocumentNum, DocumentYear, IsPromo
      FROM [dbo].[promo_data]
      WHERE CustomerType = 'XY' AND IsPromo = 1
      GROUP BY ItemRelation, DocumentNum, DocumentYear, IsPromo
      HAVING COUNT(*) = 1
    ) grouped
    ON pd.ItemRelation = grouped.ItemRelation
    AND pd.DocumentNum = grouped.DocumentNum
    AND pd.DocumentYear = grouped.DocumentYear
    AND pd.IsPromo = grouped.IsPromo
    

    【讨论】:

      猜你喜欢
      • 2022-11-15
      • 1970-01-01
      • 2014-08-17
      • 2019-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-16
      • 1970-01-01
      相关资源
      最近更新 更多