Select Sql 中条件错误的语句
Select Statement If Condition is Wrong in Sql
我是 Sql 的新手。我有两个 table,如果基于第一个 table 字段的条件错误,我需要从第二个 table 获取数据,如下所示:
第一个Table
(SELECT branch, division, position_code, emp_code,
div_brand, div_brand_targets_t2
FROM sas_provBrand_targets
) TRGT
然后我需要根据 TRGT.div_brand
的值从第二个 table 制作 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
Tables 结构(注意它们是联合国关系 tables )
sas_provBrand_targetsTable
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)
首先,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 语句,并将所需的列/格式添加到主 select
我是 Sql 的新手。我有两个 table,如果基于第一个 table 字段的条件错误,我需要从第二个 table 获取数据,如下所示:
第一个Table
(SELECT branch, division, position_code, emp_code,
div_brand, div_brand_targets_t2
FROM sas_provBrand_targets
) TRGT
然后我需要根据 TRGT.div_brand
的值从第二个 table 制作 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
Tables 结构(注意它们是联合国关系 tables ) sas_provBrand_targetsTable
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)
首先,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 语句,并将所需的列/格式添加到主 select