有表a如下:
         公司名称   采购原料  采购数量      采购单价         日期
          一公司      合金      100         0.5        2007.11.26
         二公司      合金      200         0.8        2007.12.15
         三公司      合金      200         0.7        2008.01.01我想求出从一年来采购原料“合金”单价最低的“公司名称”和“采购单价”
请问这个sql语句如何写?
谢谢了!!!

解决方案 »

  1.   

    ---------------------------------
    --  Author: liangCK 小梁
    --  Date  : 2008-11-23 17:02:27
    ---------------------------------
     
    --> 生成测试数据: @T
    DECLARE @T TABLE (公司名称 VARCHAR(6),采购原料 VARCHAR(4),采购数量 INT,采购单价 NUMERIC(2,1),日期 DATETIME)
    INSERT INTO @T
    SELECT '一公司','合金',100,0.5,'2007.11.26' UNION ALL
    SELECT '二公司','合金',200,0.8,'2007.12.15' UNION ALL
    SELECT '三公司','合金',200,0.7,'2008.01.01' UNION ALL
    SELECT '三公司','SQL',200,0.7,'2008.01.01'--SQL查询如下:--每年采购原料为合金的采购单价最小的公司SELECT *
    FROM @T AS t
    WHERE NOT EXISTS(
              SELECT *
              FROM @T
              WHERE YEAR(日期)=YEAR(t.日期)
                  AND 采购单价<t.采购单价
                  AND 采购原料='合金'
          )
          AND 采购原料='合金'--采购原料为合金的采购单价最小的公司SELECT *
    FROM @T AS t
    WHERE 采购单价=(SELECT MIN(采购单价)
                    FROM @T)/*
    公司名称   采购原料 采购数量        采购单价                                    日期
    ------ ---- ----------- --------------------------------------- -----------------------
    一公司    合金   100         0.5                                     2007-11-26 00:00:00.000
    三公司    合金   200         0.7                                     2008-01-01 00:00:00.000(2 行受影响)公司名称   采购原料 采购数量        采购单价                                    日期
    ------ ---- ----------- --------------------------------------- -----------------------
    一公司    合金   100         0.5                                     2007-11-26 00:00:00.000(1 行受影响)
    */
      

  2.   


    select top 1 * from tb where 采购原料 '合金' order by 采购单价
      

  3.   

    select top 1 * from tb where 采购原料 = '合金' order by 采购单价
      

  4.   

    我的意思是从当前日期往前推一年,而不是说本年,
    而且不能通过一个sql语句解决吗?
    谢谢!!
      

  5.   

    ---------------------------------
    --  Author: liangCK 小梁
    --  Date  : 2008-11-23 17:02:27
    ---------------------------------
     
    --> 生成测试数据: @T
    DECLARE @T TABLE (公司名称 VARCHAR(6),采购原料 VARCHAR(4),采购数量 INT,采购单价 NUMERIC(2,1),日期 DATETIME)
    INSERT INTO @T
    SELECT '一公司','合金',100,0.5,'2007.11.26' UNION ALL
    SELECT '二公司','合金',200,0.8,'2007.12.15' UNION ALL
    SELECT '三公司','合金',200,0.7,'2008.01.01' UNION ALL
    SELECT '三公司','SQL',200,0.7,'2008.01.01'--SQL查询如下:SELECT TOP 1 *
    FROM @T AS t
    WHERE DATEDIFF(YEAR,日期,DATEADD(YEAR,-1,GETDATE()))=0
        AND 采购原料='合金'
    ORDER BY 采购单价/*
    公司名称   采购原料 采购数量        采购单价                                    日期
    ------ ---- ----------- --------------------------------------- -----------------------
    一公司    合金   100         0.5                                     2007-11-26 00:00:00.000(1 行受影响)
    */
      

  6.   

    select top 1 * from tb where 采购原料 = '合金' and datediff(yy,日期,getdate()) = 1 order by 采购单价
      

  7.   


    select top 1 * from tb where 采购原料 = '合金' and 日期 between dateadd(yy,-1,getdate()) and getdate()  order by 采购单价 
      

  8.   

    --这样是可以的
    select top 1 * from tb where 采购原料 = '合金' and 日期 between dateadd(yy,-1,getdate()) and getdate()  order by 采购单价 
      

  9.   

    select 表a.公司名称,AA.单价
    from 表a,
       (select min(采购单价) As 单价,year(convert(datetime,日期,101)) AS Y
         from 表a
         group by year(convert(datetime,日期,101))
        ) As AA
    where AA. 单价=表a.采购单价
    and  AA.Y = year(convert(datetime,表a.日期,101)) 
      

  10.   


    DECLARE @T TABLE (公司名称 VARCHAR(6),采购原料 VARCHAR(4),采购数量 INT,采购单价 NUMERIC(2,1),日期 DATETIME)
    INSERT INTO @T
    SELECT '一公司','合金',100,0.5,'2007.11.26' UNION ALL
    SELECT '一公司','合金',100,0.5,'2007.12.26' UNION ALL
    SELECT '二公司','合金',200,0.8,'2007.12.15' UNION ALL
    SELECT '三公司','合金',200,0.7,'2008.01.01' UNION ALL 
    SELECT '四公司','合金',100,0.5,'2007.10.25'--select top 1 * from @t 
    --where 采购原料 = '合金' and 日期 between dateadd(yy,-1,getdate()) and getdate()  
    --order by 采购单价select distinct 公司名称, 采购单价 from @T where 采购单价 in
    (
    select MIN(采购单价) 采购单价 from @t 
    where 采购原料 = '合金' and 日期 between dateadd(yy,-1,getdate()) and getdate()  
    )/*
    公司名称 单价
    四公司 0.5
    一公司 0.5
    */
      

  11.   

    select 公司名称, 采购单价 from 表a where 
     采购单价=(select min(采购单价)from 表a where 日期 between dateadd(yy,-1,getdate()) and getdate()  )
      

  12.   

    8楼的太有才了,
    不过。lz说了NNN次,他也回了NNN年,人品不错
      

  13.   

    8楼的是可以的
    最简单
    dawugui 人品很好啊,楼主说一次,你改一次
      

  14.   

    /*
    我想求出从一年来采购原料“合金”单价最低的“公司名称”和“采购单价” 
    */
    create TABLE #EE(Company VARCHAR(6),Mood VARCHAR(4),MCount INT,MPrice NUMERIC(2,1),Mdate DATETIME)
    INSERT INTO #EE
    SELECT '一公司','合金',100,0.5,'2007.11.26' UNION ALL
    SELECT '二公司','合金',200,0.8,'2007.12.15' UNION ALL
    SELECT '三公司','合金',200,0.7,'2008.01.01' union all
    SELECT '一公司','合金',100,0.9,'2007.11.26' union all
    SELECT '二公司','合金',100,1.2,'2007.11.26' union all
    SELECT '三公司','合金',100,1.5,'2007.11.26' union all
    SELECT '三公司','合金',100,1.2,'2007.11.26' 
    group by select E2.company,E1.price,E1.d1 from #EE E2 join (select min(E.MPrice) price,E.dd d1 from (select company,min(MPrice) MPrice,year(Mdate) dd from #EE where Mood='合金' group by company,year(Mdate))E group by E.dd)E1 on
    E1.price=E2.MPrice