查看: 1131|回复: 18
|
再请问一个MSSQL2000的问题..
[复制链接]
|
|
请问如果我只要在一个结果里LATEST的日期的结果, 要怎样写SCRIPT?
普通结果:
Prod_code DATE AMT
0001 11-05-05 5.00
0001 12-06-05 4.50
0001 15-06-06 5.00
0002 11-05-05 10.00
0002 15-07-06 11.00
要怎样写才可以拿到结果如下? :
Prod_code DATE AMT
0001 15-06-06 5.00
0002 15-07-06 11.00
请问SCRIPT要怎样写? |
|
|
|
|
|
|
|
发表于 12-2-2007 03:39 PM
|
显示全部楼层
|
|
|
|
|
|
|

楼主 |
发表于 12-2-2007 05:39 PM
|
显示全部楼层
你的意思是用
SELECT col1, Max(col2) as col2
FROM Table1
group by col1
来做?
用MAX()? |
|
|
|
|
|
|
|
发表于 12-2-2007 06:44 PM
|
显示全部楼层
没run过,不知行不。
select a.col1,a.col2,b.col3 from
(SELECT col1, Max(col2) as col2 FROM Table1 group by col1) as a
left join
table1 b
on
a.col1=b.col1 and a.col2=b.col2 |
|
|
|
|
|
|
|

楼主 |
发表于 12-2-2007 07:30 PM
|
显示全部楼层
原帖由 tensaix2j 于 12-2-2007 06:44 PM 发表
没run过,不知行不。
select a.col1,a.col2,b.col3 from
(SELECT col1, Max(col2) as col2 FROM Table1 group by col1) as a
left join
table1 b
on
a.col1=b.col1 and a.col2=b.col2
我要最LATEST的DATE哦....MAX(DATE)好像不行.... |
|
|
|
|
|
|
|
发表于 13-2-2007 07:48 AM
|
显示全部楼层
原帖由 panic_tee 于 12-2-2007 07:30 PM 发表
我要最LATEST的DATE哦....MAX(DATE)好像不行....
你确定不行吗?你确定它的datatype是datetime 吗?
用这个来check一下你的那个column 的datatype 是varchar还是date...
select * from information_schema.columns where table_name='your_tablename' |
|
|
|
|
|
|
|

楼主 |
发表于 13-2-2007 02:26 PM
|
显示全部楼层
原帖由 tensaix2j 于 13-2-2007 07:48 AM 发表
你确定不行吗?你确定它的datatype是datetime 吗?
用这个来check一下你的那个column 的datatype 是varchar还是date...
select * from information_schema.columns where table_name='your_tablename'
data_type = datetime
可是我用MAX(DATE), 它还是会显示出旧的日期和新的日期. |
|
|
|
|
|
|
|
发表于 13-2-2007 02:40 PM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 13-2-2007 03:17 PM
|
显示全部楼层
我用了tensaix的做法来做你的问题,
没有问题啊,成功!
SELECT a.*, b.Amt AS Amt
FROM (SELECT Prod_code, MAX(Date_T) AS Date_T
FROM Atest2
GROUP BY Prod_code) a LEFT OUTER JOIN
atest2 b ON a.Prod_code = b.Prod_code AND a.Date_T = b.Date_T |
|
|
|
|
|
|
|

楼主 |
发表于 13-2-2007 04:52 PM
|
显示全部楼层
原帖由 tensaix2j 于 13-2-2007 02:40 PM 发表
你到底有没有grp 好来。
做到了, 谢谢.
原来是我忘了加...ON a.xxx = b.xxx 在后面, 导致它全部又SELECT了出来.
原帖由 海星1988 于 13-2-2007 03:17 PM 发表
我用了tensaix的做法来做你的问题,
没有问题啊,成功!
SELECT a.*, b.Amt AS Amt
FROM (SELECT Prod_code, MAX(Date_T) AS Date_T
FROM Atest2
...
做到了, 谢谢你的例子, 给了我很大的帮助. 感谢. |
|
|
|
|
|
|
|

楼主 |
发表于 14-2-2007 10:03 AM
|
显示全部楼层
那如果我要把:
PROD Price type
0001 12.00 A
0001 13.00 B
0002 15.20 A
0002 13.70 B
变成:
Prod Type A Type B
0001 12.00 13.00
0002 15.20 13.70
要怎样做啊? 需要INSERT 去一个新的TABLE吗? |
|
|
|
|
|
|
|
发表于 14-2-2007 11:04 AM
|
显示全部楼层
原帖由 panic_tee 于 14-2-2007 10:03 AM 发表
那如果我要把:
PROD Price type
0001 12.00 A
0001 13.00 B
0002 15.20 A
0002 13.70 ...
回答你的问题:
其实你的case是crosstab 来的.., 用crystal report很容易就可以做出来了,不过我还是test了一下query ,不知道还有没有更简化的!!
SELECT a.*, b.Price AS TypeB
FROM (SELECT Prod, Price AS TypeA
FROM atest1 WHERE Type = 'A') a LEFT OUTER JOIN
atest1 b ON a.Prod = b.Prod AND b.Type = 'b' |
|
|
|
|
|
|
|
发表于 14-2-2007 11:27 AM
|
显示全部楼层
原帖由 panic_tee 于 14-2-2007 10:03 AM 发表
那如果我要把:
PROD Price type
0001 12.00 A
0001 13.00 B
0002 15.20 A
0002 13.70 ...
试看这个。
select prod,
sum(case when type='A' then price end ) as typeA,
sum(case when type='B' then price end ) as typeB
from tbltest
group by prod |
|
|
|
|
|
|
|

楼主 |
发表于 14-2-2007 11:40 AM
|
显示全部楼层
原帖由 tensaix2j 于 14-2-2007 11:27 AM 发表
试看这个。
select prod,
sum(case when type='A' then price end ) as typeA,
sum(case when type='B' then price end ) as typeB
from tbltest
group by prod
结果出来是:
PROD TYPEA TYPEB
0001 13.00 NULL
0001 NULL 15.00
0002 12.00 NULL
0002 NULL 13.00 |
|
|
|
|
|
|
|
发表于 14-2-2007 11:52 AM
|
显示全部楼层
原帖由 panic_tee 于 14-2-2007 11:40 AM 发表
结果出来是:
PROD TYPEA TYPEB
0001 13.00 NULL
0001 NULL 15.00
0002 12.00 NULL
0002 NULL 13.00
我明明已经grp,sum(x) 起来了。
[ 本帖最后由 tensaix2j 于 14-2-2007 11:58 AM 编辑 ] |
|
|
|
|
|
|
|
发表于 14-2-2007 11:55 AM
|
显示全部楼层
你有没有跟着打
若你有多过2个type..可以试看这个。
declare cur cursor for select distinct type from tbltest
open cur
declare @type char
declare @sql varchar(8000)
set @sql ='select prod, '
fetch next from cur into @type
while @@fetch_status = 0
begin
set @sql=@sql+' sum(case when type='''+@type+''' then price end ) as type'+@type+','
fetch next from cur into @type
end
set @sql=substring(@sql,1,len(@sql)-1)
set @sql=@sql+' from tbltest'
set @sql=@sql+' group by prod'
exec(@sql)
close cur
deallocate cur
[ 本帖最后由 tensaix2j 于 14-2-2007 11:58 AM 编辑 ] |
|
|
|
|
|
|
|

楼主 |
发表于 14-2-2007 11:59 AM
|
显示全部楼层
原帖由 tensaix2j 于 14-2-2007 11:52 AM 发表
我明明已经grp起来了。
行了!
超感谢两位大大的帮忙!!!
原来我还把TYPE放在GROUP BY里面.....SRY, 感谢两位的帮忙!! |
|
|
|
|
|
|
|
发表于 14-2-2007 12:17 PM
|
显示全部楼层
原帖由 tensaix2j 于 14-2-2007 11:55 AM 发表
你有没有跟着打
若你有多过2个type..可以试看这个。
declare cur cursor for select distinct type from tbltest
open cur
declare @type char
declare @sql varchar(8000)
set @sql ='select pr ...
好聪明的做法,这可以写在store-prod 里面! |
|
|
|
|
|
|
|

楼主 |
发表于 14-2-2007 12:43 PM
|
显示全部楼层
原帖由 tensaix2j 于 14-2-2007 11:55 AM 发表
你有没有跟着打
若你有多过2个type..可以试看这个。
declare cur cursor for select distinct type from tbltest
open cur
declare @type char
declare @sql varchar(8000)
set @sql ='select pr ...
我的有三个TYPE. 可是用CASE能拿到我要的结果了. 谢谢.
你的这个, 我会COPY起来做学习的, 谢谢~ |
|
|
|
|
|
|
| |
本周最热论坛帖子
|