2017-07-06 66 views
2

我有问题为下表生成SQL查询。 这里是我的表:if else使用sql查询

County   | Store  | Stock | Display | Designation 
--------------- | --------- | ----- | ------- | ------------ 
USA    | USD  | 1  | Yes  | Merchandiser 
USA    | USD  | 2  | Yes  | Promoter 

我想成为导致这样

County   | Store  | Stock | Display | Designation 
--------------- | --------- | ----- | ------- | ------------ 
USA    | USD  | 2  | Yes  | Merchandiser 
USA    | USD  | 2  | Yes  | Promoter 

的情况是,如果名称是发起人,同时使用显示器和库存数据。 如果指定来自Merchandiser,则使用来自Promoter的库存数据 如何实现此目的?

+1

这个问题并目前不符合StackOverflow规则。请说明迄今为止您尝试过的内容,以及其他一些示例,其中一些将会更改/更新,一些则不会。 – Reeza

+5

美国是一个国家,而不是一个县。 – jarlh

+1

也许是一个自我离开的加入?添加更多样本数据并调整预期结果,以使事情更清晰。 – jarlh

回答

2

请尝试以下代码来创建临时表

--===== If the test table already exists, drop it 
IF OBJECT_ID('TestDB..#mytable','U') IS NOT NULL 
    DROP TABLE #mytable 
--===== Create the test table with 
CREATE TABLE #mytable 
     (
     Country varchar(20), 
     Store varchar(20), 
     Stock int, 
     Display varchar(5), 
     Designation varchar(20) 
     ) 
    --===== Insert the test data into the test table 
INSERT INTO #mytable 
     (Country, Store, Stock, Display, Designation) 


SELECT 'SG','a','2','YES','Merchandiser' UNION ALL 
SELECT 'SG','a','4','YES','Promoter' 

现在使用下面的上述查询

SELECT Country, 
     Store , 
     (CASE WHEN (Designation = 'Merchandiser') THEN (SELECT SUM(STOCK) FROM #mytable WHERE Country = Country AND Designation = 'Promoter' GROUP BY Country) ELSE STOCK END) AS "stock", 
     Display, 
     Designation FROM #mytable 
2
Select a.Country, a.Store 
, Stock = CASE WHEN a.Designation = "Merchendiser" THEN b.Stock ELSE a.Stock 
, Display = CASE WHEN a.Designation = "Merchendiser" THEN b.Display ELSE a.Display 
, a.Designation 
FROM YourTable a LEFT JOIN YourTable b WHERE b.Designation = "Promoter" 

可能会伎俩。目前无法测试。编辑:我看到你没有说明你使用了哪个SQL(即SQL服务器,MySQL,PostgreSQL等,因此取决于这个解决方案可能无法运行)。

+0

需要考虑什么时候b为空(即没有启动子) – JohnHC

2

尝试这个

SELECT County, 
      Store , 
      (CASE WHEN (Designation = 'Merchandiser') THEN (SELECT SUM(STOCK) FROM TABLE WHERE County = County AND Designation = 'Promoter' GROUP BY County) ELSE STOCK END) AS "stock", 
      Display, 
      Designation 
FROM table 

这个请求给你所需要的结果。

+0

它是否工作? –

+0

OP将另一个A标记为已接受。 – Sami

2

我想你期待这样的查询

 

    Select a.Country, a.Store 
    , (CASE WHEN a.Designation = "Merchendiser" THEN (select Top 1 b.Stock from YourTable b where b.Designation = "Promoter" and b.Country = a.Country and b.Store = a.Store order by id desc) ELSE a.Stock) as Stock 
    , a.Display 
    , a.Designation 
    FROM YourTable a WHERE b.Designation = "Promoter"