add batch remove batch split batch comment selection show hidden batches hide batch highlight batch
db<>fiddle
donate feedback about
By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
CREATE TABLE tableA(
[項目] NVARCHAR(5),
[廠商] NVARCHAR(5),
[購入日期] DATE
);

DECLARE @startDt DATE = '2019/04/26',
@endDt DATE = '2019/04/30'

INSERT INTO tableA VALUES (N'牙刷','A','2019/04/26');
INSERT INTO tableA VALUES (N'牙刷','A','2019/04/27');
INSERT INTO tableA VALUES (N'牙刷','B','2019/04/26');
INSERT INTO tableA VALUES (N'水壺','A','2019/04/30');
INSERT INTO tableA VALUES (N'水壺','B','2019/05/15');


WITH CTE AS (
SELECT @startDt startDt,@endDt endDt
UNION ALL
SELECT DATEADD(DAY,1,startDt),endDt
FROM CTE
WHERE DATEADD(DAY,1,startDt)<=endDt
),CTE2 AS(
SELECT 項目,廠商,startDt
FROM (
SELECT [項目],
[廠商],
COUNT(CASE WHEN [購入日期] BETWEEN @startDt and @endDt THEN 1 END) cnt
FROM tableA
GROUP BY [項目],[廠商]
HAVING COUNT(CASE WHEN [購入日期] BETWEEN @startDt and @endDt THEN 1 END) > 0
) t1 CROSS JOIN CTE
)
SELECT 項目,廠商,[購入日期]
FROM tableA
WHERE [購入日期] < @startDt OR [購入日期] > @endDt
項目 廠商 購入日期
水壺 A 2019-04-26
水壺 A 2019-04-27
水壺 A 2019-04-28
水壺 A 2019-04-29
水壺 A 2019-04-30
水壺 B 2019-05-15
牙刷 A 2019-04-26
牙刷 A 2019-04-27
牙刷 A 2019-04-28
牙刷 A 2019-04-29
牙刷 A 2019-04-30
牙刷 B 2019-04-26
牙刷 B 2019-04-27
牙刷 B 2019-04-28
牙刷 B 2019-04-29
牙刷 B 2019-04-30
Warning: Null value is eliminated by an aggregate or other SET operation.