日期:2014-05-17  浏览次数:20634 次

帮忙看一下这个sql怎么写才好.
g_trade_tradelist 是订单表
g_trade_goodslist 是物品明细表
两个表之间tradeid字段是关联的.
tradelist中tradestatus=5 and printexpress=''之外的单是不查询的.
现在想查询在g_trade_goodslist中出现次数最多的货品(货品列名是'goodsid')在g_trade_tradelist中对应的所有订单(满足tradestatus=5 and printexpress=''两个条件的)



我用的是
select * FROM [wdgj30].[dbo].[G_Trade_GoodsList] where TradeID in(
select TradeID from (
select top 1 goodsid,count(GoodsID)as c from wdgj30.dbo.G_Trade_GoodsList where TradeID in(
select tradeid from wdgj30.dbo.g_trade_tradelist where tradestatus=5 and printexpress=''
)group by GoodsID order by c desc

)a
)

但是出来的结果好像不是我要的.
中间几行可以查出出现次数最多的goodsid,但是往回查g_trade_tradelist表的时候就把所有订单都查询到了....
------解决方案--------------------
select TradeID from (
            select top 1 goodsid,count(GoodsID)as c

你的第2行和第3行语句好像有错,第2行选择TradeID列,但是第3行里面只有goodsid与c,没有TradeID,这个语句能运行吗?
------解决方案--------------------
试试是不是这样
SELECT  *
FROM    g_trade_tradelist a
WHERE   EXISTS ( SELECT 1
                 FROM   ( SELECT TOP 1
                                    tradeid ,
                                    COUNT(1) c
                          FROM      g_trade_goodslist
                          GROUP BY  tradeid
                          ORDER BY  COUNT(1)
                        ) b
                 WHERE  a.tradeid = b.tradeid )
        AND tradestatus = 5
        AND printexpress = ''

------解决方案--------------------
能否給個你想要的結果
------解决方案--------------------
exists是一个筛选条件。满足的就筛选,不满足就不筛选,所以和你select* from g_trade_tradelist where tradestatus=5 and printexpress=''不一样的
------解决方案--------------------
引用:
引用:能否給個你想要的結果
不知道这样你能不能看懂
goodslist:
tradeid     goodsid    ...
100         b