这样的SQL怎么实现?(50分)

A

anper

Unregistered / Unconfirmed
GUEST, unregistred user!
彩票表

开奖期数 号码
04001 05
04001 08
04001 28
04002 31
04002 35
04002 14

SELECT语句实现成:
04001 05 08 28
04002 31 35 14
 
楼主:如果是把号码链接起来可以容易做得到!但把
号码分开当作一个字段可能比较麻烦!
 
不会写还不改你的数据表????
 
用连接的方法就可以了!
 
老兄对彩票也有研究啊,你是哪里的。留下Email.
 
以前有类似问题,搜索一下就可以.
 
首先做一个函数(测试通过):

CREATE FUNCTION f_GetCode(@开奖期数 varchar(10))
returns varchar(500)

As
BEGIN
declare @Sresult varchar(500)
SET @Sresult = ''
select @Sresult = @Sresult + isnull(号码,'') + '@' from 彩票表 where 开奖期数 = @开奖期数
if @Sresult <> ''
SET @Sresult = substring(@Sresult,1,len(@Sresult) - 1)
return @Sresult

END
//SQL语句实现
select 开奖期数,substring(dbo.f_GetCode(开奖期数),1,2) as 号码1,
substring(dbo.f_GetCode(开奖期数),4,2) as 号码2,
substring(dbo.f_GetCode(开奖期数),7,2) as 号码3 from 彩票表 group by 开奖期数
不过这样做有点死板,自己改造一下吧!功能是可以实现了的。
 
彩票表

开奖期数 号码
04001 05
04001 08
04001 28
04002 31
04002 35
04002 14

SELECT语句实现成:
开奖期数 号码1 号码2 号码3
---------|-------|------|-------
04001 | 05 | 08 | 28
04002 | 31 | 35 | 14

需要说明一下,不是SELECT成一个字段,而是分开字段。
 
楼主为什么不修改一下表的结构呢?
 
因为这样的表结构,我查询时比较方便, 如果分开字段我觉得不方便执行查询语句,
但是我又不得不要做回一个这样的列表。
 
楼主:我上面的就是这样分开字段的阿!还是我理解错了。
 
为什么非要用一条语句实现??
用多条语句查询
将查询结果按自己的需求排序,岂不简单。
 
提供一種方法:
1. 先用一個 Query 選取所有的 <開獎期數>, 如
Query1.SQL.Add('Select Distinct 開獎期數 From 彩票表');

2. 通過循環取出 Query1.FieldByName('開獎期數').AsString , 組成如下的語句:
Select A.開獎期數, A.號碼1, A.號碼2, A.號碼3
From 彩票表 As A
Where A.開獎期數='04001'
Union
Select B.開獎期數, B.號碼1, B.號碼2, B.號碼3
From 彩票表 As B
Where B.開獎期數='04002'
其中,條件中的 '04001','04002' 是從 Query1 中循環取出
 
1:KK2000说的有点复杂,除了取子字符时要计算isnull替代来的一个空格位应该可以实现。
2:文子说的原理应该是可以的,但是又似乎不太可行,因为如果我有100期,我要不要在SELECT的语句里Union100次,还是我没有明白,请再说明一下。
不管如何,以上两人我都会派分的了。
3:这么多人建议表结构修改,我也在考虑, 但是我又在想像这种结构:

开奖期数 号码1 号码2 号码3
---------|-------|------|-------
04001 | 05 | 08 | 28
04002 | 31 | 05 | 14

我要统计某个数字的出现频率,该怎么写SELECT,比如我要统计05的2次频率。
如果这个问题能得到解决马上派分!!!!
 
*我要统计某个数字的出现频率,该怎么写SELECT,比如我要统计05的2次频率。
我想,你能否把号码变成一串字符串, 05,08,28....
这样查字串就成了
 
统计频率只要select count(字段) from 表,呵呵,我正在研究你想要的结果,呵呵,不过
目前还没有结果呀。有点复杂.
 
用的是SQL Server?
如果是那你在帮助中Search“交叉表”就可以了,里面有。
呵呵,彩票?写彩票软件?厉害哦,有没有中过啊。在写哪中彩票的软件?
 
* 2:文子说的原理应该是可以的,但是又似乎不太可行,因为如果我有100期,我要不要在SELECT的语句里Union100次,还是我没有明白,请再说明一下。
1. 我確實是這個意思, 這是個笨辦法.我用這個辦法從出貨單中統計出一個月的銷貨數量表, 就有 30個 Union. 但是出貨單的資料表結構不可能改變, 目前為止, 我一直沒有找到更好的辦法.
* 3:这么多人建议表结构修改,我也在考虑, 但是我又在想像这种结构:
2. 可不可以這樣:

Select Distionct A.號碼1, B.s1+C.s2+D.s3 AS 次數
From 彩票表 As A
Left Join (Select 號碼1, Count(號碼1) as s1 From 彩票表 Where 號碼1='05' Group by 號碼1) as B On B.號碼1=A.號碼1
Left Join (Select 號碼2, Count(號碼2) as s2 From 彩票表 Where 號碼2='05' Group by 號碼2) as C On C.號碼2=A.號碼1
Left Join (Select 號碼3, Count(號碼3) as s3 From 彩票表 Where 號碼3='05' Group by 號碼3) as D On D.號碼3=A.號碼1
Where A.號碼1='05'
 
SQL Server 帮助中的“交叉表”不能满足要求,因为它是Group by取出的汇总信息,我看只有“文子”的答案比较可行,不知是否还有简便的方法。
 
文子也真够行的,这么复杂的语句你也想得出来,这样做就我上面说的例子应该可以的,但是我有36个号码(假若是广东的体彩36选7),那我是不是要执行36个这语句来统计每一个数字的频率。我还想求一个再简单点的语句。
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
867
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
950
SUNSTONE的Delphi笔记
S
顶部