佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1131|回复: 18

再请问一个MSSQL2000的问题..

[复制链接]
发表于 12-2-2007 03:14 PM | 显示全部楼层 |阅读模式
请问如果我只要在一个结果里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要怎样写?
回复

使用道具 举报


ADVERTISEMENT

发表于 12-2-2007 03:39 PM | 显示全部楼层
你问的跟我问的一模一样

http://chinese2.cari.com.my/myfo ... &extra=page%3D1

如果硬要第三个column的话,self join 吧。。
回复

使用道具 举报

 楼主| 发表于 12-2-2007 05:39 PM | 显示全部楼层
原帖由 tensaix2j 于 12-2-2007 03:39 PM 发表
你问的跟我问的一模一样

http://chinese2.cari.com.my/myfo ... &extra=page%3D1

如果硬要第三个column的话,self join 吧。。


你的意思是用

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'
回复

使用道具 举报

Follow Us
 楼主| 发表于 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 | 显示全部楼层
你到底有没有grp 好来。
回复

使用道具 举报


ADVERTISEMENT

发表于 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 编辑 ]
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 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起来做学习的, 谢谢~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 27-8-2025 03:18 AM , Processed in 0.120196 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表