基本Teradata SQL添加列和求和列

时间:2017-03-20 13:12:54

标签: sql teradata

对SQL不好,很抱歉,如果我的问题看起来很愚蠢。我有这个工作代码,用于提取输入日期和在该日期输入商店1的人数。

select entry_date as Enter_Date
    ,count(entry_date) as Entries
    from db_entry
    where entry_date between '2017-03-05' and '2017-03-11'
    and entry_code like 'STR1%'
    group by entry_date

这就是它显示为

的内容
Enter_Date  Entries
3/5/2017    35
3/9/2017    30
3/10/2017   27
3/8/2017    23
3/7/2017    29
3/6/2017    32
3/11/2017   39

我想知道是否有办法为商店2添加另一列,其中entry_code为'STR2%'。我不知道该怎么做的原因是因为我没有从db_entry中提取不同的列,所以我不确定如何区分WHERE子句中的两列。

此外,我想知道是否有一种快速的方法来对每一列进行求和并将最新日期作为输入日期。理想情况下,这就是我希望我的表格看起来像:

 Enter_Date  Store 1     Store 2 
 3/11/2017   215         301

2 个答案:

答案 0 :(得分:1)

使用case表达式进行条件计数。

select entry_date as Enter_Date,
       count(case when entry_code like 'STR1%' then entry_date end) as Entries1,
       count(case when entry_code like 'STR2%' then entry_date end) as Entries2
from db_entry
where entry_date between '2017-03-05' and '2017-03-11'
  and entry_code like any ('STR1%', 'STR2%')
group by entry_date

注意:现在不需要WHERE子句like str1 / str2,但可能会加快查询速度。

编辑现在使用like any,正如@Dudu Markovitz所建议的那样!

答案 1 :(得分:1)

要回答第二个问题,只需删除GROUP BY并切换到:

select MAX(entry_date) as Enter_Date,
       count(case when entry_code like 'STR1%' then entry_date end) as "Store 1",
       count(case when entry_code like 'STR2%' then entry_date end) as "Store 2"
from db_entry
where entry_date between date '2017-03-05' and date '2017-03-11'
  and entry_code like any ('STR1%', 'STR2%')