使用sql查询的if-else条件
我无法为下表生成SQL查询。 这是我的桌子:使用sql查询的if-else条件,sql,Sql,我无法为下表生成SQL查询。 这是我的桌子: County | Store | Stock | Display | Designation --------------- | --------- | ----- | ------- | ------------ USA | USD | 1 | Yes | Merchandiser USA | USD | 2 | Yes
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
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"
场景是,如果指定为发起人,则同时使用显示和股票数据。
如果名称来自跟单员,则使用促销员提供的数据作为库存数据
我怎样才能做到这一点
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 server、MySQL、PostgreSQL等,因此根据具体情况,此解决方案可能无法运行 试试这个
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
此请求将为您提供所需的结果。我想您正期待这样的查询
County | Store | Stock | Display | Designation
--------------- | --------- | ----- | ------- | ------------
USA | USD | 2 | Yes | Merchandiser
USA | USD | 2 | Yes | Promoter
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"
请尝试以下代码创建临时表
--===== 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
此问题当前不符合StackOverflow规则。请展示您迄今为止所尝试的,以及更多的示例,一些将被更改/更新,一些不会。美国是一个国家,而不是一个县。也许是一个自左加入?添加更多样本数据并调整预期结果,以使事情更清楚。您使用的是哪种?博士后?Oracle?需要说明b为空时的情况,即没有启动程序