怎样实现以下查询?

rgn 2004-10-17 06:56:28
有以下一个表,有company,kind字段
company kind
c1 k1
c2 k2
c1 k1
c1 k2
c2 k2
c2 k1


怎样得到以下查询结果

company k1 k2 total
c1 2 1 3
c2 1 2 3

...全文
99 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lalakid 2004-10-17
  • 打赏
  • 举报
回复

假如不知道KIND有多少种,如下:
DECLARE @vchSql VARCHAR(8000),
@vchKind VARCHAR(40),
@iLoop INT,
@iCounter INT
SET @iLoop = 1
SET @vchSql = ''

SELECT id = IDENTITY(INT,1,1),
kind
INTO #Temp01
FROM (
SELECT DISTINCT
kind
FROM 表
) OK

SELECT @iCounter = @@ROWCOUNT


WHILE @iLoop <= @iCounter
BEGIN
SELECT @vchKind = kind
FROM #Temp01
WHERE id = @iLoop


SET @vchSql = @vchSql + @vchKind
+ '
= (SELECT COUNT(*)
FROM 表
WHERE company = 表1.company
AND kind = '+ '''' +@vchKind + '''' +
' GROUP BY company,kind),'
SET @iLoop = @iLoop + 1
END
SELECT @vchSql = 'SELECT DISTINCT
company,' +
@vchSql +
' total = (SELECT count(*)
FROM 表
WHERE company = 表1.company
GROUP BY company)
FROM 表 AS 表1 '

EXEC (@vchSql)


Andy__Huang 2004-10-17
  • 打赏
  • 举报
回复
用動態sql語句

declare @sql varchar(1000)
set @sql=''
select @sql=@sql+',['+max(kind)+']=sum(case kind when '''+max(kind)+''' then 1 else 0 end)'
from tb group by kind
print @sql

exec('select company'+@sql+',total=count(*) from tb group by company')

--結果
company k1 k2 total
----------------------------------
c1 2 1 3
c2 1 2 3
lalakid 2004-10-17
  • 打赏
  • 举报
回复
SELECT DISTINCT
company,
k1 = (SELECT COUNT(*)
FROM 表
WHERE company = 表1.company
AND kind = 'k1'
GROUP BY company,kind),
k2 = (SELECT COUNT(*)
FROM 表
WHERE company = 表1.company
AND kind = 'k2'
GROUP BY company,kind),
total = (SELECT count(*)
FROM 表
WHERE company = 表1.company
GROUP BY company)
FROM 表 AS 表1
rgn 2004-10-17
  • 打赏
  • 举报
回复
如果有很多个 k3,k4.... 怎么办呢?
Andy__Huang 2004-10-17
  • 打赏
  • 举报
回复
create table tb(company varchar(5), kind varchar(5))
Insert into tb
select 'c1','k1'
union all select 'c2','k2'
union all select 'c1','k1'
union all select 'c1','k2'
union all select 'c2','k2'
union all select 'c2','k1'

select company,k1=sum(case when kind='k1' then 1 else 0 end),
k2=sum(case when kind='k2' then 1 else 0 end),
total=count(*)
from tb group by company

--結果
company k1 k2 total
----------------------------------
c1 2 1 3
c2 1 2 3
Andy__Huang 2004-10-17
  • 打赏
  • 举报
回复
select company,k1=sum(case when kind='k1' then 1 else 0 end),
k2=sum(case when kind='k2' then 1 else 0 end),
total=count(*)
from tb group by company
mgsray 2004-10-17
  • 打赏
  • 举报
回复
--多打了一个
select company,sum( case kind when 'k1' then 1 else 0 end) as k1,
sum(case kind when 'k2' then 1 else 0 end) as k2,
count(1) as total
from table
group by company
mgsray 2004-10-17
  • 打赏
  • 举报
回复
select company,sum( case kind when 'k1' then 1 else 0 end) as k1,
sum(case kind when 'k2' then 1 else 0 end) as k2,
count(1) as total as total
from table
group by company

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧