我有一张这样的桌子:
Date Bob Joe Will
1/1/15 1 0 1
1/2/15 0 0 1
1/3/15 0 0 0
1/4/15 1 1 1
首选解决方案
使用一个语句,我只想返回其中的列SUM(Column) > 0
例如:
SELECT SUM(Bob) as Robert, SUM(Joe) as Joseph, SUM(Will) as William
FROM table
WHERE Date BETWEEN '1/1/15' and '1/3/15'
我希望我的结果看起来像这样:
Robert William
1 2
换句话说,因为SUM(Joe) = 0
对于我选择的日期范围,我不希望该列出Joseph
现在结果集中。Joseph
不会出现的魔法是什么?
替代解决方案
如果返回的数据略有不同,我可以处理数据,因此我考虑编写一个表函数来返回一个像这样的 2 列表:
Name Value
Robert 1
William 2
我的想法是功能代码看起来类似于:
--Declare table here
IF SELECT SUM(Bob) > 0
INSERT INTO temp (Name, Value)
('Robert', SELECT SUM(Bob))
泡沫,冲洗,重复我的每一列。我知道这并不理想,因为如果有需要考虑的新列,它需要维护,但无论如何在这种情况下还有其他维护,所以我可以处理它。
总之
有没有办法创建一个可以为我提供首选解决方案的查询?如果不是,我对替代解决方案的想法是否合理?
此解决方案为您提供“替代解决方案”答案。实现您正在寻找的主要解决方案的唯一方法是在取消透视后对结果集进行动态透视操作。该解决方案确实需要维护,但简单明了,不需要任何功能。
样本数据:
询问:
编辑:
理想情况下,您不会像那样存储表格,它看起来像是从 Excel 电子表格中复制的。您将有一个包含三列、日期、名称和值的表,然后根据它进行查询。