我有两个问题。我有一张大桌子用于市场营销活动。我想创建一个表来呈现买方国家的关税编号。由于我的国家/地区列表每季度都会更改一次,因此我想将它们放入clarify / Set语句中。
您如何在Declare语句中使用字符串值?有没有更好的办法?我尝试了各种方法,用逗号,单引号,以下列表中没有引号的方法:( ' ”AU” , ”GB” , ”NZ” ')
。
在Select语句中使用更多动态SQL时,是否有更好的方法? 这是我到目前为止尝试过的:
DECLARE @tariff_1 varchar(100)
SET @tariff_1 = ( ' ”AU” , ”GB” , ”NZ” ')
DECLARE @tariff_2 varchar(100)
SET @tariff_2 = ( '"GB" , "US" , "GB" ')
DECLARE @tariff_3 varchar(100)
SET @tariff_3 = ( '"CH" , "US" , "JE" ')
SELECT
a.[Product_1]
,a.[Product_2]
,a.[Product_3]
,a.[Product_4]
,a.[Product_5]
,CASE WHEN a.[Product_1] IN (@tariff_1) THEN '3' ELSE '999' END AS 'Buyer_country1'
,CASE WHEN a.[Product_2] IN (@tariff_2) THEN '3.5' ELSE '999' END AS 'Buyer_country2'
,CASE WHEN a.[Product_3] IN (@tariff_2) THEN '4' ELSE '999' END AS 'Buyer_country3'
FROM [IDW_stage_DEV].[dbo].[table] a
该表如下所示:
Product_1 Product_2 Product_3 Product_4 Product_5 Buyer_country1 Buyer_country2
-------------------------------------------------------------------------------
AU GB NULL NULL NULL 999 999
GB US JE NULL NULL 999 999
AU GB US NULL NULL 999 999
另外,根据上面的结果,我还需要创建一个变量,该变量将为我提供关税价格最高的国家。
对于第1行 新创建的变量“ highest_tariff_paid”应呈现为:GB
对于第2行 新创建的变量“ highest_tariff_paid”应呈现为:JE
对于第3行 新创建的变量“ highest_tariff_paid”应呈现为:美国
您可以这样做而不破坏选择查询吗?那怎么办?
答案 0 :(得分:3)
使用表变量:
DECLARE @tariff_1 TABLE (Code VARCHAR(100));
INSERT INTO @tariff_1 (Code) VALUES ('AU'), ('GB'), ('NZ');
DECLARE @tariff_2 TABLE (Code VARCHAR(100));
INSERT INTO @tariff_2 (Code) VALUES ('GB'), ('US'), ('GB');
DECLARE @tariff_3 TABLE (Code VARCHAR(100));
INSERT INTO @tariff_3 (Code) VALUES ('CH'), ('US'), ('JE');
SELECT
a.[Product_1]
, a.[Product_2]
, a.[Product_3]
, a.[Product_4]
, a.[Product_5]
, CASE WHEN a.[Product_1] IN (SELECT Code from @tariff_1) THEN '3' ELSE '999' END AS 'Buyer_country1'
, CASE WHEN a.[Product_2] IN (SELECT Code from @tariff_2) THEN '3.5' ELSE '999' END AS 'Buyer_country2'
, CASE WHEN a.[Product_3] IN (SELECT Code from @tariff_2) THEN '4' ELSE '999' END AS 'Buyer_country3'
FROM [IDW_stage_DEV].[dbo].[table] a