我使用过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中执行此操作以获得相同的结果?
答案 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 ) ;
答案 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