之前发过帖子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 后面不行。

解决方案 »

  1.   

    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 (select * tb where 条件='是' ) t
    group by a
      

  2.   

    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 where 条件='是' 
    group by a
      

  3.   

    select a,SUM(b) b,
      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
      

  4.   

    select a,SUM(b) b,
      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
      

  5.   

    --------------------------------------------------------------------------
    --  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 行受影响)
    */
      

  6.   

    这个有效果,可是多加了一个功能,能不能整个加到select语句里面去啊
      

  7.   

    之前的几个方法也试了下,发现凡是有from的地方都必须重新加上筛选选项,否则就是单独的运算了