有表a如下:
公司名称 采购原料 采购数量 采购单价 日期
一公司 合金 100 0.5 2007.11.26
二公司 合金 200 0.8 2007.12.15
三公司 合金 200 0.7 2008.01.01我想求出从一年来采购原料“合金”单价最低的“公司名称”和“采购单价”
请问这个sql语句如何写?
谢谢了!!!
公司名称 采购原料 采购数量 采购单价 日期
一公司 合金 100 0.5 2007.11.26
二公司 合金 200 0.8 2007.12.15
三公司 合金 200 0.7 2008.01.01我想求出从一年来采购原料“合金”单价最低的“公司名称”和“采购单价”
请问这个sql语句如何写?
谢谢了!!!
-- 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 行受影响)
*/
select top 1 * from tb where 采购原料 '合金' order by 采购单价
而且不能通过一个sql语句解决吗?
谢谢!!
-- 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 行受影响)
*/
select top 1 * from tb where 采购原料 = '合金' and 日期 between dateadd(yy,-1,getdate()) and getdate() order by 采购单价
select top 1 * from tb where 采购原料 = '合金' and 日期 between dateadd(yy,-1,getdate()) and getdate() order by 采购单价
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))
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
*/
采购单价=(select min(采购单价)from 表a where 日期 between dateadd(yy,-1,getdate()) and getdate() )
不过。lz说了NNN次,他也回了NNN年,人品不错
最简单
dawugui 人品很好啊,楼主说一次,你改一次
我想求出从一年来采购原料“合金”单价最低的“公司名称”和“采购单价”
*/
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