【问题标题】:Select Statement If Condition is Wrong in SqlSql中条件错误时选择语句
【发布时间】:2015-08-06 08:30:53
【问题描述】:

我对 Sql 很陌生。我有两个表,如果基于第一个表中的字段的条件错误,我需要从第二个表中获取数据,如下所示:

第一个表

(SELECT branch, division, position_code, emp_code, 
 div_brand, div_brand_targets_t2
 FROM sas_provBrand_targets 
) TRGT

然后我需要根据TRGT.div_brand 的值从第二个表中创建Select,如下所示:

IF TRGT.div_brand IN ('Other', 'HPC1', 'HPC2')
THEN 
{
 Brand = null
 Category = null
 Subcategory = null
}
ELSE
{
 (SELECT DISTINCT BRAND, REP_BRAND, category, rep_category, 
  sub_category, SUB_CATEGORY_DESCRIPTION 
  FROM masterdata.dbo.inventory_item
  WHERE sub_category = TRGT.div_brand
 ) BRNDNAME 
} 

最后我需要得到如下数据在前端显示

SELECT DISTINCT TRGT.branch BRANCH, TRGT.division DIVISION, TRGT.POSITION_CODE POSITION,
TRGT.emp_code SALESMAN, BRNDNAME.brand  + ' - ' +  BRNDNAME.rep_brand BRAND, BRNDNAME.category + ' - ' + BRNDNAME.rep_category CATEGORY, BRNDNAME.sub_category + ' - ' + BRNDNAME.SUB_CATEGORY_DESCRIPTION SUBCATEGORY,  TRGT.div_brand_targets_t2 BRANDT2

表结构(注意它们是非关系表) sas_provBrand_targets 表

yr: numeric(4, 0)
mnth: numeric(2, 0)
branch: char(4)
division: char(4)
position_code: numeric(3, 0)
emp_code: char(5)
div_brand: varchar(25)
div_brand_targets_t2: numeric(15, 2)

masterdata.dbo.inventory_item

division: char(6)
brand: char(5)
rep_brand: varchar(40)
category: char(6)
rep_category: varchar(40)
sub_category: char(8)
SUB_CATEGORY_DESCRIPTION: varchar(20)

【问题讨论】:

  • 您的 DBMS 是什么? (SQL Server、MySql、Oracle)
  • 请提供两个表的结构。没有像IF TRGT.div_brand IN ('Other', 'HPC1', 'HPC2') 这样的SQL 构造。您必须选择行,在变量中设置,然后使用IF 进行检查。
  • @Bogdan Bogdanov。我现在需要使用“案例”。但是,我只是使用“IF”来解释我需要实现的逻辑。我还提供了表格

标签: sql select case


【解决方案1】:

首先,当涉及到 SQL 思维集理论而不是逐行操作时。 实现你想要的结果集的诀窍是加入一切。

SELECT CASE WHEN TRGT.div_brand IN ('Other', 'HPC1', 'HPC2') THEN NULL ELSE BRNDNAME.BRAND END AS BRAND 
 FROM sas_provBrand_targets TRGT

LEFT/INNER>?? JOIN
(SELECT DISTINCT BRAND, REP_BRAND, category, rep_category, 
  sub_category, SUB_CATEGORY_DESCRIPTION 
  FROM masterdata.dbo.inventory_item
  WHERE 
 ) BRNDNAME ON sub_category = TRGT.div_brand

为每一列重复 case 语句,并将所需的列/格式添加到主选择中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-04
    • 2021-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多