首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

求很难的sql语句解决方案

2012-05-01 
求很难的sql语句表1 tb_res 产品表idnameinfo1产品a测试产品2产品b测试产品23产品c测试产品3说明: id为自

求很难的sql语句
表1 tb_res 产品表
id name info
1 产品a 测试产品
2 产品b 测试产品2
3 产品c 测试产品3
说明: id为自增长id


表2 tb_res_package 产品地址表
id pid pUrl
1 1 /upload/p1.rar?sn=a223
2 2 /upload/p2.rar?sn=b221&from=1
3 3 /upload/p3.rar?sn=a223
说明: id为自增长id,pid为表1的id

表3 tb_down 下载表  
[date] url prams
20120421 /upload/p1.rar sn=a223
20120422 /upload/p2.rar sn=b221&from=1
20120422 /upload/p3.rar sn=a223
20120422 /upload/p3.rar sn=a223
20120423 /upload/p2.rar sn=b221&from=1
20120423 /upload/p3.rar sn=a223
说明: url为不带参数的下载地址。parms是url的参数

表4 tb_channel 渠道表
id name sn
1 公司1 a223
2 公司2 b221
说明: id为自增长id。sn为序列号,即下载表中sn=的值
-------------------------------------------
我想要得到这样一个表
pid pname channelid channelname downnum date
1 产品a 1 公司1 1 20120421  
2 产品b 2 公司2 1 20120422  
3 产品c 1 公司1 2 20120422  
2 产品b 2 公司2 1 20120423  
3 产品c 1 公司1 1 20120423 





[解决办法]

SQL code
create table ta (id int,name varchar(50),info varchar(50))insert ta select 1 ,'产品a' ,'测试产品'insert ta select 2 ,'产品b', '测试产品2'insert ta select 3 ,'产品c', '测试产品3'create table td (id int,pid int,purl varchar(max))insert td select 1 ,1 ,'/upload/p1.rar?sn=a223'insert td select 2 ,2 ,'/upload/p2.rar?sn=b221&from=1'insert td select 3 ,3 ,'/upload/p3.rar?sn=a223'create table tb (date varchar(50),url varchar(max),prams varchar(max) )insert tb select '20120421', '/upload/p1.rar', 'sn=a223'insert tb select '20120422', '/upload/p2.rar', 'sn=b221&from=1'insert tb select '20120422', '/upload/p3.rar', 'sn=a223'insert tb select '20120422', '/upload/p3.rar', 'sn=a223'insert tb select '20120423', '/upload/p2.rar', 'sn=b221&from=1'insert tb select '20120423', '/upload/p3.rar' ,'sn=a223'create table tc(id int,name varchar(50),sn varchar(50))insert tc select 1 ,'公司1', 'a223'insert tc select 2 ,'公司2', 'b221'select pid,ta.name,tc.name ,tc.id,count(substring(prams,4,4))num, date from tb join tc on substring(prams,4,4)=sn join td on td.purl=tb.url+'?'+tb.prams join ta on ta.id=td.pid  group by pid,ta.name,tc.name ,tc.id,date order by date/*pid    name    name    id    num    date1    产品a    公司1    1    1    201204212    产品b    公司2    2    1    201204223    产品c    公司1    1    2    201204222    产品b    公司2    2    1    201204233    产品c    公司1    1    1    20120423*/drop table tadrop table tbdrop table tcdrop table td 

热点排行