sql - 复杂分组和结果集

标签 sql tsql

我需要测试两个条件:

  1. 有多少 mysku 没有改写为“REP”,但在列 [mysku_catagory] ​​的表 2 中有相同的类别可用

  2. 条件:mysku 列中存在多少个 COMPETETOR_SKU 不包含存在于 COMPETETOR_SKU_CATAGORY 中的 CATAGORY 表 2.

示例数据:

DECLARE @table1 TABLE
(
 MYSKU VARCHAR (20),    
 CATAGORY VARCHAR (20), 
 OVERTYPE VARCHAR (20), 
 COMPETETOR_SKU VARCHAR (20)
)

Insert @table1


SELECT 'AAA19-1405',    'Cold Air Intake',  'REP',  'MCN8LTC8K' UNION ALL
SELECT 'AAA19-1505',    'Cold Air Intake',  'REC',  'MCN8LTC8K' UNION ALL
SELECT 'AAA19-1508',    'Cold Air Intake',  'REP',  'MCN8LTC8K' UNION ALL
SELECT 'AAA19-2303',    'Cold Air Intake',  'REP',  'MCN8LTC8K' UNION ALL
SELECT 'AAA19-2305',    'Cold Air Intake',  'REC',  'MCN8LTC8K' UNION ALL
SELECT 'AAA19-2308',    'Cold Air Intake',  'REC',  'MCN8LTC8K' UNION ALL
SELECT 'AAA19-2405',    'Cold Air Intake',  'REC',  'MCN8LTC8K' UNION ALL
SELECT 'AAA19-4003',    'Cold Air Intake',  'REC',  'MCN8LTC8K' UNION ALL
SELECT 'AAA19-4005',    'Cold Air Intake',  'REP',  'MCN8LTC8K' UNION ALL
SELECT 'AAA19-4103',    'Cold Air Intake',  'REC',  'MCN8LTC8K' UNION ALL
SELECT 'MCN8LTC8K',    'Air Filter Wrap',  'REP',  'MCN8AWCC3' UNION ALL
SELECT 'MCN8LTC8K',    'Air Filter Wrap',  'REP',  'MCN8AWCC3' UNION ALL
SELECT 'MCN8LTC8K',    'Catchmehere'    ,  'REP',  'KZNWRTY65' UNION ALL
SELECT 'MCN8LTC8K',     'I M HERE TOO' ,  'REP',  'SDREWTY345'



declare @table2 table
(
mysku_catagory VARCHAR (50),    
COMPETETOR_SKU_CATAGORY VARCHAR (50)

)
INSERT @table2

SELECT 'Cold Air Intake',   'Air Filter%'

预期输出:

--'AAA19-1505', 'Cold Air Intake',  'REC',  'MCN8LTC8K'

--'AAA19-2305', 'Cold Air Intake',  'REC',  'MCN8LTC8K'

--'AAA19-2308', 'Cold Air Intake',  'REC',  'MCN8LTC8K'

--'AAA19-2405', 'Cold Air Intake',  'REC',  'MCN8LTC8K'

--'AAA19-4003', 'Cold Air Intake',  'REC',  'MCN8LTC8K'

--'AAA19-4103', 'Cold Air Intake',  'REC',  'MCN8LTC8K'

--'MCN8LTC8K',    'Catchmehere'    ,  'REP',  'KZNWRTY65'

--'MCN8LTC8K',     'I M HERE TOO' ,  'REP',  'SDREWTY345'

最佳答案

像这样尝试:

SELECT *
FROM   @table1 AS t1
WHERE  ( t1.OVERTYPE <> 'REP'
         AND EXISTS(SELECT *
                    FROM   @table2 AS t2
                    WHERE  t2.mysku_catagory = t1.CATAGORY) )
        OR ( NOT EXISTS(SELECT *
                        FROM   @table2 AS t2
                        WHERE  t1.CATAGORY LIKE t2.COMPETETOR_SKU_CATAGORY)
             AND ( t1.OVERTYPE = 'REP'
                   AND NOT EXISTS(SELECT *
                                  FROM   @table2 AS t2
                                  WHERE  t2.mysku_catagory = t1.CATAGORY) ) ) 

关于sql - 复杂分组和结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34314737/

相关文章:

sql - 如何在 SQL Server 中使用 CONTAINSTABLE 获得 'combined' OR 短语排名?

mysql - 搜索 UPPER 中前两个字符的字段

sql - 将日期添加到 SQL 数据库备份文件名

c# - 如果使用 null 检查,LINQ2SQL 不会返回行

sql - 每十步选择SQL

sql - 将 NTEXT 列与常量值进行比较的正确方法是什么?

sql - 使用带有重置 SQL Server 2012 的运行总计的销售目标

php - 使用 MD5 和 SHA-1 进行双重哈希

php - 如何使用mysql查找有效期

php - 如何获取未读通知(2个带FK的表)