表A.
Owner row_no category
-------------------------
A 1 U
B 1 T
B 2 T
C 1 U
C 2 T
C 3 U
C 4 U
我正在寻找一种解决方案,将值存储到应该检索的其他表中
预期的表输出应该如下所示。
Owner row_no category
---------------------------
A 1 U
B 1 T
C 3 Both
我尝试使用以下方法,结果证明是一个错误。
SELECT *
INTO B
FROM A
WHERE ROW_NO LIKE CASE
WHEN ROW_NO = 1 THEN ROW_NO
ELSE MAX(ROW_NO) - 1
END
尚未想出检索该类别!
你能帮忙解决一下吗?
你的逻辑对我来说并不完全清楚。特别是,我假设您报告row_no
的逻辑是当所有者的最大值为1时返回1,否则返回该最大值减1。
我们可以尝试在这里做一个简单的聚合查询来生成你想要的东西。
SELECT
Owner,
CASE WHEN MAX(row_no) = 1 THEN 1 ELSE MAX(row_no) - 1 END AS row_no,
CASE WHEN COUNT(DISTINCT category) > 1 THEN 'Both' ELSE MAX(category) END AS category
FROM tableA
GROUP BY
Owner;
一种方法是使用GROUP BY
:
WITH VTE AS(
SELECT *
FROM(VALUES ('A',1,'U'),
('B',1,'T'),
('B',2,'T'),
('C',1,'U'),
('C',2,'T'),
('C',3,'U'),
('C',4,'U')) V([Owner], Row_no, Category))
SELECT [Owner],
ISNULL(NULLIF(MAX(Row_no) - 1,0),1) AS Row_no,
CASE WHEN MIN(Category) = MAX(Category) THEN MAX(Category) ELSE 'Both' END AS Category --Assumes Category cannot have a value of NULL
FROM VTE
GROUP BY [Owner];