ID | 类型ID | 开始日期结束日期 | 名称||
---|---|---|---|---|
01 | 猫 | 2022/01/012022/02/01 | ||
02 | cat | 2022年3月01日 | 2022年4月01日 | 凯蒂 |
03 | 狗 | arb | 宝石 | |
04 | 狗 | arb | arb | Jas |
05 | 狗 | arb | arb | 凯蒂|
06 | 大象 | |||
07 | 大象 |
您只需使用IN
子句来筛选这些列,然后再使用GROUP BY TypeId
。
您还需要条件聚合来获得日期
DECLARE @types TABLE (typeId varchar(20) PRIMARY KEY);
INSERT @types VALUES ;
DECLARE @from varchar(20) = 'Jas';
DECLARE @to varchar(20) = 'Katy';
SELECT
t.TypeId,
DateDiff = DATEDIFF(month, MIN(CASE WHEN t.Name = @from THEN t.StartDate END), MAX(CASE WHEN t.Name = @to THEN t.EndDate END)),
[Name to Name] = @from + ' to ' + @to
FROM YourTable t
WHERE t.TypeId IN ('cat', 'dog')
AND t.Name IN (@from, @to)
GROUP BY
t.TypeID;
理想情况下,您应该使用表值参数或临时表来正确地参数化它。
DECLARE @types TABLE (typeId varchar(20) PRIMARY KEY);
INSERT @types VALUES ('cat'),('dog');
DECLARE @from varchar(20) = 'Jas';
DECLARE @to varchar(20) = 'Katy';
SELECT
t.TypeId,
DateDiff = DATEDIFF(month, MIN(CASE WHEN t.Name = @from THEN t.StartDate END), MAX(CASE WHEN t.Name = @to THEN t.EndDate END)),
[Name to Name] = @from + ' to ' + @to
FROM YourTable t
WHERE t.TypeId IN (SELECT tp.TypeId FROM @types tp)
AND t.Name IN (@from, @to)
GROUP BY
t.TypeID;
db<gt;小提琴
注意,这假设StartDate
和EndDate
是实际的datetime
值,而不是奇怪的字符串。