您好,是否有一个查询会产生以下结果?
name count
19 - Evening ACL 1130
21 - 14 - 16 Provision 585
81 - HE FT 458
85 - HE PT 233如何才能使查询连接的两行包含'HE‘。我追求的结果是:
name count
19 - Evening ACL 1130
21 - 14 - 16 Provision 585
HE 691下面是我使用的查询
SELECT
vc.vc_name,
COUNT(DISTINCT s.s_studentreference) AS 'Count'
FROM
student s
INNER JOIN person p ON p.p_id = s.s_id
INNER JOIN moduleenrolment e ON e.e_student = p.p_id
INNER JOIN module m ON m.m_id = e.e_module
LEFT JOIN valid_codes vc ON vc.vc_code = m.m_mode AND vc.vc_domain = 'moa'
WHERE
LEFT(m.m_reference, 2) IN ('12')
GROUP BY
m.m_mode,
vc.vc_name
ORDER BY
m.m_mode,
vc.vc_name谢谢
发布于 2013-01-23 20:19:26
试试这个(假设'HE'的两边各有一个空格);
select name, count
from yourTable where charindex(' he ',name)=0
union
select 'HE' name, sum(count) as count
from yourTable where charindex(' he ',name)>0另一种方式是;
select A.name, sum(A.count) as count
from (
select case charindex(' he ',name)
when 0 then name else 'HE' end name, count
from yourTable
) A
group by A.name
order by A.name发布于 2013-01-23 20:53:16
原始结果集中的列"name“只是一个列,还是它是通过连接数据生成的计算列?
使用原力(就像绝地武士一样),我会说它似乎将数字与描述和字母PT,FT连接在一起……
如果是这样的话..您必须在group子句中标识包含HE描述的两行中的不同之处...我打赌在第一个结果中给出字母"P“和"F”的列在group子句中...所以你应该把他们从群里剪掉..看看他们是如何..。(在mySQL中有GROUP_CONCAT()命令,但在sqlserver中,我猜仍然没有本机函数来执行此操作,但有许多技术可以获得此结果)
但通过这种方式,你会得到这条线
81 - 85 HE PFT 691
如果您发布第一个结果集的查询,将有助于更好地理解您的问题并给出解决方案
不管怎样..。如果不是这样,我不明白为什么您要将这两行合并为一行。但唯一的解决方案是确定哪些名称具有类似Kaf的“HE”解决方案。
发布于 2013-01-23 20:16:41
您需要创建另一个列,即包含要联接的信息的计算列-即在单独的列中提取该信息(示例的HE)。
如果您有很多行,请考虑创建一个视图并在该列上添加索引(从而实现视图),以加快连接速度。
https://stackoverflow.com/questions/14479213
复制相似问题