如何根据最大和最小的另一列找出列的总和

时间:2018-01-01 10:12:37

标签: sql sql-server

我使用过DB2,我刚搬到了SQL Server。我对查询感到有些困惑。

假设我有像

这样的表格数据
StoreID | Sales
   A    |  23
   B    |  50
   B    |  50

在带有存储过程参数的数据中,我想要汇总Sales的总和。我将得到一个StoreID参数,但是在这个参数中我可以获得所有' ALL'太

在DB2中,我可以使用存储过程(在名为ParameterStore的参数中具有StoreID)获取所有数据,并使用类似

的查询
if(ParameterStore= 'ALL') Then
Set Loc_min = X'00';
Set Loc_max = X'FF';
ELSE
Set Loc_min = ParameterStore;
Set Loc_max = ParameterStore;
END if;

Select Sum(Sales) From Store_data where StoreID between Loc_min and Loc_max;

如何在SQL Server中执行此操作以获得相同的结果?

3 个答案:

答案 0 :(得分:2)

您可以检查OR中的全部或其他值的值:

DECLARE @store_id VARCHAR(20) -- or whatever length you have
SET @store_id = 'XYZ'

select sum(sales)
from store_data
where @store_id = 'ALL' or store_id = @store_id;

答案 1 :(得分:0)

如果需要十六进制比较,请尝试此操作。

DECLARE
  @ParameterStore VARCHAR(10)
  SET @ParameterStore = 'ALL'
  SELECT SUM(Sales)
  FROM Store_data
  WHERE StoreID BETWEEN (
    CASE
      WHEN @ParameterStore = 'ALL'
      THEN 0x00
      ELSE @ParameterStore
    END)
  AND (
    CASE
      WHEN @ParameterStore = 'ALL'
      THEN 0xFF
      ELSE @ParameterStore
    END ) ;

DEMO

答案 2 :(得分:0)

IF的T-SQL语法略有不同。您可以像这样使用它:

/*
DECLARE @ParameterStore VARCHAR(10);
DECLARE @Loc_min INT;
DECLARE @Loc_max INT;
*/

IF @ParameterStore = 'ALL'
    BEGIN
        Set @Loc_min = 0x00;
        Set @Loc_max = 0xFF;
    END
ELSE
    BEGIN
        Set @Loc_min = @ParameterStore;
        Set @Loc_max = @ParameterStore;
    END;

话虽如此,你想要实现的目标可以如下:

-- DECLARE @ParameterStore VARCHAR(10);
SELECT SUM(Sales)
FROM Store_data
WHERE CASE
    WHEN @ParameterStore = 'ALL' THEN -1
    WHEN @ParameterStore = StoreID THEN -1
    END = -1