有没有一种方法,包括在GROUP BY查询LIKE体现在哪里? 例如:
SELECT Count(*)
FROM tblWhatever
GROUP BY column_x [LIKE %Fall-2009%]
column_x:
--------
BIOL-Fall_2009
HIST Fall_2009
BIOL Spring_2009
结果:
------
Fall_2009 2
Spring_2009 1
有没有一种方法,包括在GROUP BY查询LIKE体现在哪里? 例如:
SELECT Count(*)
FROM tblWhatever
GROUP BY column_x [LIKE %Fall-2009%]
column_x:
--------
BIOL-Fall_2009
HIST Fall_2009
BIOL Spring_2009
结果:
------
Fall_2009 2
Spring_2009 1
你需要对表达式返回“Fall_2009”或“Spring_2009”的表情,然后组。 例如:
-- identify each pattern individually w/ a case statement
SELECT
CASE
WHEN column_x LIKE '%Fall[_]2009' THEN 'Fall 2009'
WHEN column_x LIKE '%Spring[_]2009' THEN 'Spring 2009'
END AS group_by_value
, COUNT(*) AS group_by_count
FROM Table1 a
GROUP BY
CASE
WHEN column_x LIKE '%Fall[_]2009' THEN 'Fall 2009'
WHEN column_x LIKE '%Spring[_]2009' THEN 'Spring 2009'
END
要么
-- strip all characters up to the first space or dash
SELECT
STUFF(column_x,1,PATINDEX('%[- ]%',column_x),'') AS group_by_value
, COUNT(*) as group_by_count
FROM Table1 a
GROUP BY
STUFF(column_x,1,PATINDEX('%[- ]%',column_x),'')
要么
-- join to a (pseudo) table of pattern masks
SELECT b.Label, COUNT(*)
FROM Table1 a
JOIN (
SELECT '%Fall[_]2009' , 'Fall, 2009' UNION ALL
SELECT '%Spring[_]2009', 'Spring, 2009'
) b (Mask, Label) ON a.column_x LIKE b.Mask
GROUP BY b.Label
不,LIKE功能不支持GROUP BY
子句。 你需要使用:
SELECT x.term,
COUNT(*)
FROM (SELECT CASE
WHEN CHARINDEX('Fall_2009', t.column) > 0 THEN
SUBSTRING(t.column, CHARINDEX('Fall_2009', t.column), LEN(t.column))
WHEN CHARINDEX('Spring_2009', t.column) > 0 THEN
SUBSTRING(t.column, CHARINDEX('Spring_2009', t.column), LEN(t.column))
ELSE
NULL
END as TERM
FROM TABLE t) x
GROUP BY x.term
LIKE没有意义在你的情况下,因为它匹配或没有,但它不建立组。 你将不得不使用解析列值成什么样的数据是有意义的字符串函数。
我不相信这样,就像是一个有效的二进制状态 - 这是LIKE或不喜欢的,也有不符合逻辑度可能被组合在一起“神似”的。 再然后,我就可以把我的摇杆。
如果你真正想要的是在你的分组数据看看HAVING子句来表达过滤。
http://msdn.microsoft.com/en-us/library/ms180199.aspx
如果你的课程始终以五个字母,你可以把它很简单:
SELECT substring(column_x,5,100), count(*)
FROM YourTable
GROUP BY substring(column_x,5,100)
否则,检查彼得斯或Rexem的答案。
你可以这样说,但像其他人说,并没有真正意义:
SELECT COUNT(*)
FROM tblWhatever
GROUP BY column_x
HAVING column_x LIKE '%Fall-2009%'
不幸的是,你有一个严重的结构化数据库,具有组合的主题和TERM到同一列。 当您使用GROUP BY它列对待每个唯一值在结果集的一组。 你最好劝重组数据库中,如果在所有可能的 - 你可能想在这里三列(主题,TERM,SCHOOL_YEAR)而是两个有可能会是适当的。
如果你不能重组的数据库,你需要解析列提取术语。 Rexem表明你做到这一点的一种方式,你也可以使用一个存储过程。
这个怎么样:
SELECT MAX(column_x) AS column_x
FROM (
SELECT column_x
FROM tblWhatever
WHERE (UPPER(column_x) LIKE '%Fall-2009%')
) AS derivedtbl_1 GROUP BY column_x