Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用sql查询的if-else条件_Sql - Fatal编程技术网

使用sql查询的if-else条件

使用sql查询的if-else条件,sql,Sql,我无法为下表生成SQL查询。 这是我的桌子: County | Store | Stock | Display | Designation --------------- | --------- | ----- | ------- | ------------ USA | USD | 1 | Yes | Merchandiser USA | USD | 2 | Yes

我无法为下表生成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
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为空时的情况,即没有启动程序