首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

帮忙看一上这个sql如何写才好

2013-01-09 
帮忙看一下这个sql怎么写才好.g_trade_tradelist 是订单表g_trade_goodslist 是物品明细表两个表之间trade

帮忙看一下这个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


100         b



tradeid     goodsid
100         b
101         b
102         b
103         b
104         b
...

這樣?
[解决办法]
不知道楼主是否了解over()函数,我觉得可以用over函数解决你的问题
[解决办法]
你的格式好不好规范点啊!~~~  看起来费劲·~~
[解决办法]
 

select * from #g_trade_tradelist where TradeID in
(
    ---取符合条件的TradeID
    select c.TradeID from  #g_trade_tradelist c 
        join #g_trade_goodslist d on c.TradeID=d.TradeID  
        and c.tradestatus=5 and c.printexpress=''-----加上限制
        and d.goodsid in
        (
            --分组,降序排列,取第一个goodsId
            select  top 1  goodsid  from 
            (
                ---查询#g_trade_tradelist中符合tradestatus=5 and  printexpress='' 的记录
                select a.TradeID,b.goodsid 
                from #g_trade_tradelist a 
                join #g_trade_goodslist b 
                on a.TradeID=b.TradeID and a.tradestatus=5 and a.printexpress=''----这里实际上已经加过限制了
             ) t group by goodsid  order by count(goodsid) desc
        )  
)

热点排行