A 表:singleloadno styleno
LID STYLENO
LID STYLENO
LID STYLENO
LID STYLENO
LID STYLENO
LID STYLENO
LID STYLENO
LID STYLENO
LID STYLENOB表
material numtotal styleno
13412501 20 STYLENO
13412501 34 STYLENO要求结果:
material numtotal styleno singleloadno(数量)
13412501 54 STYLENO 9

解决方案 »

  1.   

    USE master;
    GO
    SET NOCOUNT ON
    IF OBJECT_ID(N'A',N'U')IS NOT NULL DROP TABLE A
    GO
    IF OBJECT_ID(N'B',N'U')IS NOT NULL DROP TABLE B
    GOCREATE TABLE A--创建测试数据表
    (
    singleloadno nvarchar(15),
    styleno nvarchar(15)
    )
    INSERT INTO A--插入测试数据
    SELECT 'LID', 'STYLENO' UNION ALL 
    SELECT 'LID', 'STYLENO' UNION ALL 
    SELECT 'LID', 'STYLENO' UNION ALL 
    SELECT 'LID', 'STYLENO' UNION ALL 
    SELECT 'LID', 'STYLENO' UNION ALL 
    SELECT 'LID', 'STYLENO' UNION ALL 
    SELECT 'LID', 'STYLENO' UNION ALL 
    SELECT 'LID', 'STYLENO' UNION ALL 
    SELECT 'LID', 'STYLENO1' UNION ALL 
    SELECT 'LID', 'STYLENO1' UNION ALL 
    SELECT 'LID', 'STYLENO1' UNION ALL 
    SELECT 'LID', 'STYLENO1' UNION ALL 
    SELECT 'LID', 'STYLENO1' UNION ALL 
    SELECT 'LID', 'STYLENO1' UNION ALL 
    SELECT 'LID', 'STYLENO1' UNION ALL 
    SELECT 'LID', 'STYLENO1' UNION ALL 
    SELECT 'LID', 'STYLENO' 
    go
    CREATE TABLE B--创建测试数据表
    (
    material nvarchar(15),
    numtotal int,
    styleno nvarchar(15)
    )
    INSERT INTO B--插入测试数据
    SELECT '13412501', 20, 'STYLENO' UNION ALL 
    SELECT '13412501', 64, 'STYLENO' UNION ALL 
    SELECT '13412501', 20, 'STYLENO1' UNION ALL 
    SELECT '13412501', 34, 'STYLENO1' UNION ALL 
    SELECT '134125011', 30, 'STYLENO' UNION ALL 
    SELECT '134125011', 34, 'STYLENO' UNION ALL 
    SELECT '134125011', 200, 'STYLENO1' UNION ALL 
    SELECT '134125011', 34, 'STYLENO1'
    gowith cte as
    (
    select material ,sum(numtotal) as numtotal,styleno  from B
    group by material,styleno  
    )
    select material,numtotal,A.styleno,COUNT(singleloadno) AS singleloadno
    from A inner join cte on cte.styleno=A.styleno GROUP BY material,numtotal,A.styleno
    ORDER BY materialgo
    IF OBJECT_ID(N'A',N'U')IS NOT NULL DROP TABLE A
    GO
    IF OBJECT_ID(N'B',N'U')IS NOT NULL DROP TABLE B
    GO/*
    material        numtotal    styleno         singleloadno
    --------------- ----------- --------------- ------------
    13412501        54          STYLENO1        8
    13412501        84          STYLENO         9
    134125011       64          STYLENO         9
    134125011       234         STYLENO1        8
    */
      

  2.   


    select b.material,sum(b.numtotal) numtotal,b.styleno,count(*) as singleloadno
    from b left join a on b.styleno = a.styleno
    group by b.material,b.styleno
      

  3.   

    bin_520_yan 的太麻烦了, 借用你的数据定义
    CREATE TABLE A--创建测试数据表
    (
    singleloadno nvarchar(15),
    styleno nvarchar(15)
    )
    INSERT INTO A--插入测试数据
    SELECT 'LID', 'STYLENO' UNION ALL 
    SELECT 'LID', 'STYLENO' UNION ALL 
    SELECT 'LID', 'STYLENO' UNION ALL 
    SELECT 'LID', 'STYLENO' UNION ALL 
    SELECT 'LID', 'STYLENO' UNION ALL 
    SELECT 'LID', 'STYLENO' UNION ALL 
    SELECT 'LID', 'STYLENO' UNION ALL 
    SELECT 'LID', 'STYLENO' UNION ALL 
    SELECT 'LID', 'STYLENO1' UNION ALL 
    SELECT 'LID', 'STYLENO1' UNION ALL 
    SELECT 'LID', 'STYLENO1' UNION ALL 
    SELECT 'LID', 'STYLENO1' UNION ALL 
    SELECT 'LID', 'STYLENO1' UNION ALL 
    SELECT 'LID', 'STYLENO1' UNION ALL 
    SELECT 'LID', 'STYLENO1' UNION ALL 
    SELECT 'LID', 'STYLENO1' UNION ALL 
    SELECT 'LID', 'STYLENO' 
    go
    CREATE TABLE B--创建测试数据表
    (
    material nvarchar(15),
    numtotal int,
    styleno nvarchar(15)
    )
    INSERT INTO B--插入测试数据
    SELECT '13412501', 20, 'STYLENO' UNION ALL 
    SELECT '13412501', 64, 'STYLENO' UNION ALL 
    SELECT '13412501', 20, 'STYLENO1' UNION ALL 
    SELECT '13412501', 34, 'STYLENO1' UNION ALL 
    SELECT '134125011', 30, 'STYLENO' UNION ALL 
    SELECT '134125011', 34, 'STYLENO' UNION ALL 
    SELECT '134125011', 200, 'STYLENO1' UNION ALL 
    SELECT '134125011', 34, 'STYLENO1'
    go实现SQL如下:select material,sum(numtotal) numtotal, styleno
    , singleloadno = (select count(*) from a where styleno=b.styleno)
    from b 
    group by material, styleno执行结果:material    numtotal    styleno     singleloadno
    -----------------------------------------------
    13412501 84 STYLENO         9
    134125011 64 STYLENO         9
    13412501 54 STYLENO1 8
    134125011 234 STYLENO1 8
      

  4.   

    select b.material,sum(b.numtotal) numtotal,b.styleno,count(*) as singleloadno
    from b left join a on b.styleno = a.styleno
    group by b.material,b.styleno
      

  5.   


    CREATE TABLE A--创建测试数据表
    (
    singleloadno nvarchar(15),
    styleno nvarchar(15)
    )
    INSERT INTO A--插入测试数据
    SELECT 'LID', 'STYLENO' UNION ALL 
    SELECT 'LID', 'STYLENO' UNION ALL 
    SELECT 'LID', 'STYLENO' UNION ALL 
    SELECT 'LID', 'STYLENO' UNION ALL 
    SELECT 'LID', 'STYLENO' UNION ALL 
    SELECT 'LID', 'STYLENO' UNION ALL 
    SELECT 'LID', 'STYLENO' UNION ALL 
    SELECT 'LID', 'STYLENO' UNION ALL 
    SELECT 'LID', 'STYLENO' 
    go
    CREATE TABLE B--创建测试数据表
    (
    material nvarchar(15),
    numtotal int,
    styleno nvarchar(15)
    )
    INSERT INTO B--插入测试数据
    SELECT '13412501', 20, 'STYLENO' UNION ALL 
    SELECT '13412501', 34, 'STYLENO'
    goselect b.material,sum(numtotal)numtotal,b.styleno,
    (select count(*) from a where b.styleno = a.styleno)singleloadno
    from b
    group by b.material,b.styleno/*
    material        numtotal    styleno         singleloadno 
    --------------- ----------- --------------- ------------ 
    13412501        54          STYLENO         9(所影响的行数为 1 行)
    */