【问题标题】:SQL Server Pivot using LIKE instead of INSQL Server Pivot 使用 LIKE 而不是 IN
【发布时间】:2018-02-25 18:50:58
【问题描述】:

我想知道是否可以在不直接引用 IN 子句中的值的情况下转入存储过程。

例如,我有一个如下所示的枢轴:

select * 
from DailyIncome 
pivot (avg (IncomeAmount) for IncomeDay in ([MON],[TUE],[WED],[THU],[FRI],[SAT],[SUN])) as AvgIncomePerDay

是否有可能使它可以从以下位置获取结果:

select * 
from DailyIncome
pivot (avg (IncomeAmount) for IncomeDay LIKE ('%MON%','%TUE%','%WED%','%THU%','%FRI%','%SAT%','%SUN%')) as AvgIncomePerDay

【问题讨论】:

  • PIVOT 需要一个众所周知的列名。哪些可能的值有你的列名?
  • 我有一个将数字附加到重复值的触发器。所以我可能并不总是知道这个数字,因此需要一个通配符。

标签: sql-server stored-procedures pivot


【解决方案1】:

您应该格式化源数据。

create table tbl (name varchar(10), value int);
insert into tbl values
('mon10', 10),
('mon11', 11),
('mon13', 13),
('tue10', 20),
('tue11', 21),
('tue12', 30);
GO
6 行受影响
select *
from
(
    select case when name like '%mon%' then 'mon'
                when name like '%tue%' then 'tue'
                end name,
            value
    from   tbl
) src
pivot
(
  avg(value) for name in ([mon], [tue]) 
) pv;
GO
星期一 |星期二 --: | --: 11 | 23

dbfiddle here

【讨论】:

  • 如果我想将 mon10、mon11、mon 13 等分开怎么办?
  • @AlanPear 那么你必须将它们全部添加到IN子句中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多