SQL组通过返回多个值

时间:2017-08-21 22:43:00

标签: sql sql-server stored-procedures group-by dynamic-sql

我有一个问题,我需要从表中获取一些数据的总数

我需要执行3种类型的分组 1. 1分组应该是合作伙伴 2. 1国家分组 3. 1日期分组

我有一张像这样的桌子

PartnerId, CountryId, Date
  1           2       10-01-2017
  1           2       10-01-2017
  1           3       10-01-2017
  1           1       10-01- 2013

我希望返回数据集为

1     2    10-01-2017 - total 2
1     3    10-01-2017 - total 1
1     1    10-01-2013 - total 1

以下是我为合作伙伴分组所尝试的内容,但是我得到了错误的值并且副本总数不正确

  ELSE IF(@partnerId > 0 AND @CountryId = 0 AND @InvoiceMonth IS NULL)
        BEGIN
             SET @sql = @sql + ' INSERT INTO #FinalBucket2
          SELECT  b.PartnerId, Null, b.CountryId, NULL, a.Local_Closed_Calendar_Month, b.Total
         FROM #DataBucket2 a WITH(NOLOCK),
          ( SELECT  PartnerId, CountryId, count(*) Total
         FROM #DataBucket2 WITH(NOLOCK)
         GROUP BY PartnerId, CountryId ) b
         WHERE a.PartnerId = b.PartnerId 
       '
        END

如果我通过PartnerId,那么分组应该是合作伙伴。 如果我通过countryId而没有PartnerId& InvoiceMonth然后分组应该在国家。 如果我只通过InvoiceMonth,那么分组应仅在invoiceMonth上

1 个答案:

答案 0 :(得分:2)

您可以使用以下SQL。这将按partnerid,countryid和local_closed_calendar_month进行分组。如果您想按国家/地区对所有合作伙伴进行分组,那么您只需要切换它们。

SELECT partnerId,
       countryId,
       local_closed_calendar_month,
       COUNT(*) Total
  FROM #DataBucket2
 GROUP BY partnerId, 
          countryId,
          local_closed_calendar_month