【发布时间】:2023-01-19 19:43:51
【问题描述】:
我将如何编写基于下表的查询,以便在表中包含类似#Test1 的数据时查询将返回行。
如果同一个表包含类似#test2 的数据,其中至少 1 行的销售额为 0和有多于8 ProductTypes 那么查询不应该返回任何东西或者只返回 0
创建和插入脚本:
CREATE TABLE #TEST1
(
ProductType nvarchar(30),
Sales int,
Tax int,
Discount int
)
INSERT INTO #TEST1 (ProductType, Sales, Tax, Discount)
VALUES
('BIKES',100,1, 2),
('TRUCKS',100,1, 2),
('CARS',100,1, 2),
('SCOOTERS',100,1, 2),
('BOATS',100,1, 2),
('PLANES',100,1, 2),
('TANKS',100,1, 2),
('HELICOPTERS',100,1, 2),
('FOOD',100,1, 2),
('DRINKS',100,1, 2)
CREATE TABLE #TEST2
(
ProductType nvarchar(30),
Sales int,
Tax int,
Discount int
)
INSERT INTO #TEST2 (ProductType, Sales, Tax, Discount)
VALUES
('BIKES',100,1, 2),
('TRUCKS',100,1, 2),
('CARS',100,1, 2),
('SCOOTERS',100,1, 2),
('BOATS',100,1, 2),
('PLANES',100,1, 2),
('TANKS',100,1, 2),
('HELICOPTERS',0,0,0),
('FOOD',0,0,0),
('DRINKS',0,0,0)
select * from #TEST1
select * from #TEST2
【问题讨论】:
-
所以,让我直截了当地说,你想回来全部
#TEST1中的行,但是只要如果每一行在#TEST1出现在#TEST2? -
不应该返回任何东西或者只返回 0- 那是哪一个?目前尚不清楚你在问什么。请显示您对示例数据的期望。
-
感谢您的回复,如果有 > 8 行并且没有一行的销售额为零,我只想返回所有行。
-
我的想法是使用 ROW_NUMBER 来计算 CTE 中的行数,然后以某种方式在 where 子句中仅返回 sales > 0 的数据
-
无论如何,这样的查询都会很昂贵。您需要计算所有行并在检查所有内容后确定
Sales值。假设没有负销售额,MIN(Sales)=0会告诉您是否有任何行有 0,COUNT()>8会检查计数。这些只能出现在HAVING子句或 CTE 中