我使用过 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 中执行此操作以获得相同的结果?
您可以检查该值是 ALL 还是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;
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
如果您需要十六进制比较,请尝试此操作。
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 ) ;
演示