create table transInfo       --交易信息表
(
transDate datetime ,--交易时间
cardID char(19) ,   --交易卡号
         transType char(4) , --交易类型
transMoney money    --交易金额
)要求查询“累计交易金额最高的卡号”,不要用排序,临时表。用子查询如何实现?
感谢。

解决方案 »

  1.   

    select 
      *
    from
    (
    select
      cardid,sum(transMoney) as transMoney 
    from
      tb
    group by
      cardid
    )t
    where
      transMoney=(select max(transMoney) from (
    select
      cardid,sum(transMoney) as transMoney 
    from
      tb
    group by
      cardid
    )t
    )
      

  2.   


    select cardid
    from (select cardid,sum(transmoney) transmoney from tb group by cardid) a
    where transmonye = (select max(transmoney) from (select cardid,sum(transmoney) transmoney from tb group by cardid) b)
      

  3.   

    SELECT cardID FROM (
    SELECT SUM(transMoney) AS total,cardID FROM transInfo
    GROUP BY cardID)a
    WHERE a.total=(select MAX(total) FROM (SELECT SUM(transMoney) AS total,cardID FROM transInfo
    GROUP BY cardID)
      

  4.   

    create table #transInfo --交易信息表
    (
    transDate datetime ,--交易时间
    cardID char(19) , --交易卡号
    transType char(4) , --交易类型
    transMoney money --交易金额
    )
    INSERT #transInfo
    SELECT GETDATE(), '001', 'Test', 10.0 UNION ALL
    SELECT GETDATE(), '001', 'Test', 11.0 UNION ALL
    SELECT GETDATE(), '002', 'Test', 80.0 UNION ALL
    SELECT GETDATE(), '003', 'Test', 7.0
    go
    --SQL:
    SELECT TOP(1) WITH TIES * FROM 
    (SELECT DISTINCT cardID FROM #transInfo) a
    CROSS APPLY
    (SELECT totalMoney = SUM(transMoney) FROM #transInfo WHERE cardID = a.cardID) b
    ORDER BY totalMoney DESC
    /*
    cardID              totalMoney
    ------------------- ---------------------
    002                 80.00
    */
      

  5.   

    create table #transInfo --交易信息表
    (
    transDate datetime ,--交易时间
    cardID char(19) , --交易卡号
    transType char(4) , --交易类型
    transMoney money --交易金额
    );with Sum_Money
    AS
    (
    Select cardID,sum(transMoney) as Money
    from #transInfo
    group by cardID
    )
    Select a.cardID
    From Sum_Money a
    Where not exists(Select * from Sum_Money b where a.Money<b.Money)
      

  6.   


    create table #transInfo --交易信息表
    (
        transDate datetime ,--交易时间
        cardID char(19) , --交易卡号
        transType char(4) , --交易类型
        transMoney money --交易金额
    )
    INSERT #transInfo
    SELECT GETDATE(), '001', 'Test', 10.0 UNION ALL
    SELECT GETDATE(), '001', 'Test', 11.0 UNION ALL
    SELECT GETDATE(), '002', 'Test', 80.0 UNION ALL
    SELECT GETDATE(), '003', 'Test', 7.0
    go--SQL:
    select cardid 
    from #transinfo 
    group by cardid 
    having sum(transMoney) =
    (select max(transmoney) from
    (select cardid,sum(transMoney) as transMoney from #transinfo group by cardid) a)
      

  7.   

    sql2005方法:
    select top 1 cardid 交易卡号,
           sum(transmoney) over (partition by cardid) 累计交易金额
        from tb
    order by sum(transmoney) over (partition by cardid) desc 
      

  8.   

    select top 1 cardID ,sum(transMoney) from TableName group by cardID order by sum(transMoney) desc