SQl查询,子查询格式问题

时间:2015-05-08 17:58:06

标签: sql sql-server formatting

我需要有人帮我一些格式化。我试图使用子查询和UNION ALL等将其放入一行但没有成功。这似乎相当容易,但我只是用头撞墙。该表的布局如下:

Date    pTypeCode   Location    Amt

1/1/2015    C   Store1  50.21

1/1/2015    C   Store1  125.62

1/1/2015    P   Store 1 250.1

1/1/2015    EB  Store 1 125.01

1/1/2015    C   Store 2 50.25

1/1/2015    C   Store 2 100.25

1/1/2015    EB  Store 2 125.25

1/3/2015    EB  Store 1 35.25

1/3/2015    C   Store 1 35.25

1/3/2015    C   Store 1 35.25

1/3/2015    P   Store 1 35.25

1/3/2015    C   Store 2 85.15

1/3/2015    C   Store 2 65.25

1/3/2015    P   Store 2 65.25

1/3/2015    EB  Store 2 65.25

我需要它来获取pTypeCode的计数作为每行的列数。我可以在一个简单的查询中轻松获取我想要的数据:

SELECT Date, LOCATION,
             pTypeCode,
             Count(pTypeCode),
             Sum(Amt) AS Prem
FROM [dbo].[CommisionEntry]
WHERE Date >=
    (SELECT DATEADD(DAY, 1, EOMONTH(GetDate(), -1)))
  AND Date <=
    (SELECT EOMONTH(GetDate()))
GROUP BY date, LOCATION,
               pTypeCode

但我需要计数(pTypeCode)= P和行中的C和EB也是如此:

Date  Count(pTypeCode) C    Count(pTypeCode) P  Count(pTypeCode) EB    SUM(Amt)

1/1/2015  2  1  1  550.94

任何帮助都将不胜感激。

由于

2 个答案:

答案 0 :(得分:1)

如果你没有像pivot这样的东西(虽然你应该,因为看起来你正在使用T-SQL),你可以为每个值创建列,如下所示:

select
  date
  ,sum(case pTypeCode when 'C' then 1 else null end) count_c
  ,sum(case pTypeCode when 'P' then 1 else null end) count_p
  ,sum(case pTypeCode when 'EB' then 1 else null end) count_eb
  ,sum(amt) sum_amt
from
  CommisionEntry
where date >=
  dateadd(day, 1, eomonth(GetDate(), -1))
    and date <= eomonth(GetDate())
group by
  date

答案 1 :(得分:0)

numberOfCellInRow