如我有表
商品
公司  部门  姓名   商品名称  价格  折扣
PS   市场  小张   苹果       60   0.8    
PY   业务  小红   苹果       50   0.5
...现在要查询出 同一种商品 价格*折扣最小的记录 (公司 部门 姓名 为主键)
如上面的苹果就为
PY   业务  小红   苹果       50   0.5谢谢

解决方案 »

  1.   

    --> liangCK小梁 于2008-10-16
    --> 生成测试数据: #T
    IF OBJECT_ID('tempdb.dbo.#T') IS NOT NULL DROP TABLE #T
    CREATE TABLE #T (公司 VARCHAR(2),部门 VARCHAR(4),姓名 VARCHAR(4),商品名称 VARCHAR(4),价格 INT,折扣 NUMERIC(2,1))
    INSERT INTO #T
    SELECT 'PS','市场','小张','苹果',60,0.8 UNION ALL
    SELECT 'PY','业务','小红','苹果',50,0.5--SQL查询如下:SELECT *
    FROM #T AS t
    WHERE 价格*折扣=(
                     SELECT MIN(价格*折扣)
                     FROM #T
                     WHERE 商品名称=t.商品名称
                    )/*
    公司   部门   姓名   商品名称 价格          折扣
    ---- ---- ---- ---- ----------- ---------------------------------------
    PY   业务   小红   苹果   50          0.5(1 行受影响)*/
      

  2.   

    select * from 商品  a
    where not exists ( 
      select 1 from 商品 
      where 商品名称=a.商品名称
      and 价格*折扣<a.价格*a.折扣
    )
      

  3.   

    --> liangCK小梁 于2008-10-16
    --> 生成测试数据: #T
    IF OBJECT_ID('tempdb.dbo.#T') IS NOT NULL DROP TABLE #T
    CREATE TABLE #T (公司 VARCHAR(2),部门 VARCHAR(4),姓名 VARCHAR(4),商品名称 VARCHAR(4),价格 INT,折扣 NUMERIC(2,1))
    INSERT INTO #T
    SELECT 'PS','市场','小张','苹果',60,0.8 UNION ALL
    SELECT 'PY','业务','小红','苹果',50,0.5--SQL查询如下:SELECT DISTINCT b.*
    FROM #T AS a
     CROSS APPLY
     (
        SELECT TOP 1 *
        FROM #T
        WHERE 商品名称=a.商品名称
        ORDER BY 价格*折扣
     ) AS b/*
    公司   部门   姓名   商品名称 价格          折扣
    ---- ---- ---- ---- ----------- ---------------------------------------
    PY   业务   小红   苹果   50          0.5(1 行受影响)*/
      

  4.   

    如果公司唯一的话:
    select a.* from 商品 a inner join (select 公司,商品名称,min(价格*折扣) from 商品 group by 公司,商品)t on t.公司=a.公司 and t.商品=a.商品
      

  5.   


    declare @t table
    (
    公司 char(2),
    部门 varchar(10),
    姓名 varchar(20),
    商品名称  varchar(10),
    价格  int,
    折扣  decimal(10,2)
    )insert @t select 'PS','市场','小张','苹果',60,0.8 
    union all select 'PY','业务','小红','苹果',50,0.5 
    insert @t select 'PS','市场','小张','葡萄',50,0.5 
    union all select 'PY','业务','小红','葡萄',60,0.8 select
      a.*
    from @t a
    join(
    select 
       商品名称,
       min(价格*折扣) as col
    from @t 
    group by 商品名称
    )b
    on b.商品名称 = a.商品名称
    and b.col = a.价格 * a.折扣
    /**
    PY 业务 小红 苹果 50 0.50
    PS 市场 小张 葡萄 50 0.50
    **/
      

  6.   

    select a.* from 商品 a inner join (select 公司,部门,商品名称,min(价格*折扣) from 商品 group by 公司,部门,商品)t on t.公司=a.公司 and t.部门=a.部门 and t.商品=a.商品
      

  7.   

    如果是2005,建议使用分析函数
    Row_number()over()函数
      

  8.   

    select *
    from (select rowid=row_number() over  (order by 公司,部门,姓名,价格*折扣),* from ta) a
    where rowid = 1