sql多表查询汇总,超市的销售记录是每个月一个表,想查询1月15号到2月15号某条码的销售记录,语句怎么写

表名: 1月销售 2月销售 每个表结构,字段都一样,
表结构为
流水号 时间 条码 商品名称 价格
00001 2011-01-02 123 肉 5
00002 2011-01-03 456 菜 3
想要的结果是从表1月销售,2月销售里 查询一个条码 1月15到2月15的销售记录 ,谢谢

自定义函数如下:

create function Myfun(@startDate varchar(10),@endDate varchar(10),@tiaoma int)
return @Myfun table(
流水号 char(5),
时间 datetime,
条码 int,
商品名称 varchar(20),
价格 money
)--以上表结构和你的表结构应该一样,不同请改
as
begin
insert into @Myfun
select * from(select * from 1月销售
union all
select * from 2月销售 union all .......................... from 12月销售)
where 条码=@tiaoma and 时间 between convert(datetime, @startDate) and convert(datetime,@endDate)
end
以上函数建立后在程序中调用:
select * from Myfun('2011-1-15','2011-2-15',123)
就可以了,可以根据你的参数生成你想要的表
注意下,日期格式和范围不要超过你的表的日期,条吗是表里有的
...................的部分你自己补上,如果想连表名也判断追加分,我在给你写上追问

干脆你帮写完整好代码吧,加双倍分 用VB ,数据库是在局域网上的sql 2000 , 名为fwq ,库名chaoshi, 表名就是1月销售,2月销售里, 连接数据库的代码我不会,谢谢了。

追答

是不是表名只有1月销售和 2月销售???请尽量详细的描述下你的数据库
我想知道,如果跨年,你的月份表数据不就不对了吗?

还有,我大意少写了代码:
(datetime,@endDate)
return ---少写了这个
end

追问

有跨年的,但先不用理了,能从2011年开始就可以,以后到2012的再说,说不定到时地球磁极都转了。 你就写连接数据,到查询跨月就可以,我是用VB,谢谢了。

追答

Imports System.Data.SqlClient
Imports System.Data

Public Class Form1
Dim cn As SqlConnection
Dim cm As SqlCommand
Dim da As SqlDataAdapter
Dim tb As DataTable
Dim strCn As String

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
cntion() '打开链接数据库
Dim t = datb("select * from Myfun('2011-1-15','2011-2-15',123)") '查找想要的数据
DataGridView1.DataSource = t '将数据绑定到DataGridView1的控件
cn.Close() '关闭链接
End Sub
'''
''' 建立数据库的链接
'''
'''
Public Sub cntion()
Dim MyServer, MyDatabase, MyUser, MyPassword As String
MyServer = "255.255.0.1" '服务器地址
MyDatabase = "fwq" '数据库名
MyUser = "sa" '数据库登录名
MyPassword = "123456789" '数据库密码
strCn = "server=" & MyServer & ";database=" & MyDatabase & ";uid=" & MyUser & ";pwd=" & MyPassword
cn = New SqlConnection(strCn)
End Sub
'''
''' 根据SQL语句判断执行所影响的行数(执行insert,update,delete用)
'''
''' SQL查询语句
''' 返回执行后更改了多少条数据
'''
Public Function exec(ByVal sqlstring As String)
Dim strSql = sqlstring
cm = New SqlCommand(strSql, cn)
Dim ii = cm.ExecuteNonQuery()
exec = ii
End Function
'''
''' 根据SQL语句查询返回一张数据表
'''
''' SQL查询语句
''' 返回执行查询后的数据表
'''
Public Function datb(ByVal sqlstring As String)
Dim strSql = sqlstring
da = New SqlDataAdapter(strSql, cn)
tb = New DataTable()
da.Fill(tb)
datb = tb
End Function
End Class
以上是vb希望你能举一反三
再追问下我改下函数

追问

我还没测试,先感谢,添加了工程后,要添加什么控件之类吗? 追加了,给你改函数

追答

create function Myfun(@startDate varchar(10),@endDate varchar(10),@tiaoma int)
returns @Myfun table(
流水号 char(5),
时间 datetime,
条码 int,
商品名称 varchar(20),
价格 money
)--以上表结构和你的表结构应该一样,不同请改
as
begin
insert into @Myfun
select * from(select * from [1月销售]
union all
select * from [2月销售]) as p1
where p1.条码=@tiaoma and (p1.时间 between convert(datetime, @startDate) and convert(datetime,@endDate))
return
end
--因为函数是手写的没验证,现在验证后的语法错误已经修改
--使用SQL查询处理器执行下代码,数据库中就存在此函数了
--VB中的语句:
--Dim t = datb("select * from Myfun('2011-1-15','2011-2-15',123)") '查找想要的数据
--其中:"select * from Myfun('2011-1-15','2011-2-15',123)"就是SQL查询语句
--DataGridView1.DataSource = t '将数据绑定到DataGridView1的控件
--也就是需要添加控件:"DataGridView"

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-02-28
select* from (
select * from 1月销售
union all
select * from 2月销售
) A where 条码='123‘
第2个回答  2011-03-01
select * from (
select * from [1月销售]
union all
select * from [2月销售]
) A where 条码='123'
and 时间 between '2010-1-15' and '2010-2-15'