之前发过帖子http://topic.csdn.net/u/20100413/11/ba6d2fdb-3fe2-4769-925b-0af6c7efdbca.html?59269后来使用了大大们的语句,很成功,不过今天又要增加一个筛选的功能,就是针对序号 数值1 数值2 数值3 条件
A 1 11 111 是
B 2 22 222 否
C 3 33 333 是
C 4 44 444 否
B 5 55 555 是
B 6 66 666 是
A 7 77 777 否select a,SUM(b) b,
c=STUFF((select ','+ltrim(c) from tb where a=t.a for xml path('')),1,1,''),
d=MAX(d)
from tb t
group by a
这个语句里面,要增加一个限定选择对象的条件,就是上表里面只统计“是”列,应该把where 条件='是' 这个放在哪里啊。我试了放在 from tb t 后面不行。
A 1 11 111 是
B 2 22 222 否
C 3 33 333 是
C 4 44 444 否
B 5 55 555 是
B 6 66 666 是
A 7 77 777 否select a,SUM(b) b,
c=STUFF((select ','+ltrim(c) from tb where a=t.a for xml path('')),1,1,''),
d=MAX(d)
from tb t
group by a
这个语句里面,要增加一个限定选择对象的条件,就是上表里面只统计“是”列,应该把where 条件='是' 这个放在哪里啊。我试了放在 from tb t 后面不行。
解决方案 »
- deny connect to database engine 和 disable login
- 建数据库的一个问题
- 只采用SQL语言,不采用开发工具,能实现某功能完成后自动提示文本的功能吗?
- 三表联合查询,获取某值最大记录
- SQL 2005 UPDATE 问题
- 请大家不吝赐教一个sql,谢谢!
- 哪位高人用过64位的SQL Server啊,普通的23位客户机能不能连接上这个服务器啊???
- 要从informix转到ms-sql,以前的代码都是c的(ec for informix),ms-sql有c接口么?
- 将表table中的序号字段(int型)修改为该记录的行数的存储过程怎么写?即该记录为第三行则该记录的序号字段为3。
- ODBC出错了,请兄弟们帮忙。
- 关于连接数据库的问题
- 求存储过程
c=STUFF((select ','+ltrim(c) from tb where a=t.a for xml path('')),1,1,''),
d=MAX(d)
from (select * tb where 条件='是' ) t
group by a
c=STUFF((select ','+ltrim(c) from tb where a=t.a for xml path('')),1,1,''),
d=MAX(d)
from tb t where 条件='是'
group by a
c=STUFF((select ','+ltrim(c) from tb where a=t.a and 条件='是' for xml path('')),1,1,''),
d=MAX(d)
from tb t
group by a
c=STUFF((select ','+ltrim(c) from tb where 条件 = '是' and a=t.a for xml path('')),1,1,''),
d=MAX(d)
from tb t
where 条件 = '是'
group by a
-- Author : htl258(Tony)
-- Date : 2010-04-22 01:36:50
-- Version:Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)
-- Jul 9 2008 14:43:34
-- Copyright (c) 1988-2008 Microsoft Corporation
-- Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 2)
--------------------------------------------------------------------------
--> 生成测试数据表:tbIF NOT OBJECT_ID('[tb]') IS NULL
DROP TABLE [tb]
GO
CREATE TABLE [tb](A NVARCHAR(10),B INT,C INT,D INT,E NVARCHAR(10))
INSERT [tb]
SELECT 'A',1,11,111,N'是' UNION ALL
SELECT 'B',2,22,222,N'否' UNION ALL
SELECT 'C',3,33,333,N'是' UNION ALL
SELECT 'C',4,44,444,N'否' UNION ALL
SELECT 'B',5,55,555,N'是' UNION ALL
SELECT 'B',6,66,666,N'是' UNION ALL
SELECT 'A',7,77,777,N'否'
GO
--SELECT * FROM [tb]-->SQL查询如下:
IF NOT OBJECT_ID('[fn_tb]') IS NULL
DROP FUNCTION [fn_tb]
GO
CREATE FUNCTION fn_tb(@A VARCHAR(10))
RETURNS VARCHAR(20)
AS
BEGIN
DECLARE @R VARCHAR(20)
SELECT @R=ISNULL(@R+',','')+LTRIM(C)
FROM TB
WHERE E=N'是' AND A=@A
RETURN @R
END
GO--SELECT:
SELECT A,SUM(B) B,C=DBO.fn_tb(A),D=MAX(D)FROM TB WHERE E=N'是' GROUP BY A
/*
A B C D
---------- ----------- -------------------- -----------
A 8 11 777
B 13 55,66 666
C 7 33 444(3 行受影响)
*/