日期:2014-05-18 浏览次数:20762 次
UPDATE  warehouse.dbo.everyday_server
SET     leijiamount = T.amount,
        leijirenshu = T.usercount                      
FROM    warehouse.dbo.everyday_server a
INNER JOIN ( SELECT c.game_id ,
                                c.server_id ,
                                d.zongleixing, COUNT(DISTINCT c.user_id) AS usercount,SUM(c.order_amount) AS amount
                        FROM    wanhui2.dbo.info_recharge c ,
                                warehouse.dbo.everyday_type d
                        WHERE   c.order_status = 1
                                AND c.order_admin_user = 0
                                AND ( c.order_type = 0
                                      OR c.order_type = 2
                                    )
                                AND d.plat = 'wanhui2'
                                AND c.user_channel = d.user_channel
                                AND CONVERT(VARCHAR(10), DATEADD(s,
                                                              c.user_add_date
                                                              + 28800,
                                                              '1970-01-01'), 120) >= a.kaifuriqi
                                AND DATEDIFF(dd,
                                             DATEADD(s,
                                                     c.order_submit_time
                                                     + 28800, '1970-01-01'),
                                             GETDATE()) > 0
                        GROUP BY c.game_id ,
                                c.server_id ,
                                d.zongleixing
                      ) T ON a.game_id = T.game_id AND T.server_id = a.server_id AND T.zongleixing = a.zongleixing
WHERE   a.plat = 'wanhui2'
        AND a.user_channel = '推广'
        AND a.user_type = '新用户'
------解决方案--------------------
上面代码是一个示意,可以把对应子查询精简。
具体调试,LZ得在环境中自己处理一下。
下列代码,参考,2005版本以上适用。 
WITH TT
AS(SELECT c.game_id ,
                    c.server_id ,
                    d.zongleixing, COUNT(DISTINCT c.user_id) AS usercount,SUM(c.order_amount) AS amount
            FROM    wanhui2.dbo.info_recharge c ,
                    warehouse.dbo.everyday_type d,
                    warehouse.dbo.everyday_server a
            WHERE   c.order_status = 1
                    AND c.order_admin_user = 0