我的数据表是:
code
--------
ABCD0000
AAAA0000
BBBB0000
CCCC0000
DDDD0001
说我要查找具有相同尾数的代码列表等于4,它应该返回
substring|substring
---------|---------
ABCD 0000
AAAA 0000
BBBB 0000
CCCC 0000
我的SQL代码是
SELECT SUBSTRING(subjects.code ,5, 8), SUBSTRING(subjects.code ,1, 4)
FROM subjects
HAVING count(SUBSTRING(subjects.code ,5, 8)) = 8;
它引起错误为
列“ subjects.code”必须出现在GROUP BY子句中或在聚合函数中使用
但是如果我在查询中添加了它,则不返回任何内容
我认为您想要这样的东西[fiddle ::
创建并填充表格:
CREATE TABLE subjects
(
code VARCHAR (20) NOT NULL
);
INSERT INTO subjects VALUES ('ABCD0000'), ('AAAA0000'), ('BBBB0000'), ('CCCC0000'), ('DDDD0001');
然后运行初步 SQL:
SELECT
SUBSTRING (code, 5, 8) AS codes4,
COUNT(SUBSTRING (code, 5, 8)) AS cnt
FROM subjects
GROUP BY codes4
HAVING COUNT(SUBSTRING (code, 5, 8)) = 4
结果:
codes4 cnt
0000 4
然后将JOIN
的结果返回到原始表:
SELECT
SUBSTRING (code, 1, 4) AS prefix,
SUBSTRING (code, 5, 8) AS codes4
FROM subjects s
JOIN
(
SELECT
SUBSTRING (code, 5, 8) AS codes4, COUNT(SUBSTRING (code, 5, 8)) AS cnt
FROM subjects
GROUP BY codes4
HAVING COUNT(SUBSTRING (code, 5, 8)) = 4
) AS t
ON SUBSTRING(s.code, 5, 8) = t.codes4;
结果:
prefix codes4
ABCD 0000
AAAA 0000
BBBB 0000
CCCC 0000
等等! ps。欢迎来到论坛! :-)
使用CTE
;with cte as
(
Select SUBSTRING(code ,5, 8) as substring1, SUBSTRING(code ,1, 4) as substring2 from subjects
)
SELECT * FROM cte group by substring1,substring2 having COUNT(substring1)=8;