一个sql server 查询

什么都没留下 2011-01-15 11:05:15
如果有这么三张表:
1、表jglx: 字段 id jglx ……
1 平开窗 ……
2 推拉窗 ……
3 平开门 ……
…… …… ……

表1 jglx 中的记录为表2 jgmx 中的字段名
2、表jgmx: 字段 id gcmc zzlh 平开窗 推拉窗 平开门 dates ……
1 15 T80 10 null 15 2010-5-9 ……
2 15 T81 20 null null 2010-1-6 ……
3 16 T90 NULL 10 NULL 2010-9-10 ……
4 16 T91 null null 10 2010-10-11 ……
5 17 T70 NULL NULL NULL 2010-10-15 ……
…… …… …… …… …… …… ……
为表gcmc的id ** 数字为所对应的数量

3、表gcmc: 字段 id gcmc rq ……
1 test 2010-5-9 ……
…… …… 2011-1-5 ……
15 名称 2010-6-18 ……
16 名称2 2010-8-10 ……
17 名称3 2010-7-9 ……
…… ……

求一查询语句:要就得到表3 gcmc 中 的 id 与 gcmc 内容集。条件为,表3中rq在2010年 及 表2字段中有表1(jglx)内容的列不为空或0(如,平开窗不能为null、空或0)。

也就是。通过表1 jglx 求得 表2 的gcmc 值,再根据表3 的rq,求得最后的,id与gcmc

请哪位大虾帮帮忙!
...全文
186 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
oiph 2012-12-24
  • 打赏
  • 举报
回复
谢谢,又是一个思路
什么都没留下 2011-01-17
  • 打赏
  • 举报
回复
To
wwwwgou(Shawn)


这个查询结果记录集是输出后就自动清除的,但如果我要保存得到的查询记录集,由我自己关闭应该怎么处理。(程序中使用)
Shawn 2011-01-17
  • 打赏
  • 举报
回复
N表示后面的字符是unicode编码,每个字符会占两个字节.
如果表2中的字段个数(平开窗 推拉窗 平开门)是不固定的,只能拼SQL了。
呵呵,已经比较简单了,或者再等等高手吧
什么都没留下 2011-01-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wwwwgou 的回复:]

SQL code
create table jglx
(
id int identity,
jglx nvarchar(100)
)
insert into jglx(jglx)
select N'平开窗' union all
select N'推拉窗' union all
select N'平开门'

create table jgmx
(
id int identi……
[/Quote]

弱弱问下,这里的 N 有什么作用,是什么意思。 结果正确,但请问有没有更加简单点的语句
Shawn 2011-01-16
  • 打赏
  • 举报
回复
create table jglx
(
id int identity,
jglx nvarchar(100)
)
insert into jglx(jglx)
select N'平开窗' union all
select N'推拉窗' union all
select N'平开门'

create table jgmx
(
id int identity,
gcmc int,
zzlh varchar(100),
平开窗 int,
推拉窗 int,
平开门 int,
dates datetime
)
insert into jgmx(gcmc, zzlh, 平开窗, 推拉窗, 平开门, dates)
select 15, 'T80', 10, null, 15, '2010-5-9' union all
select 15, 'T81', 20, null, null, '2010-1-6' union all
select 16, 'T90', null, 10, null, '2010-9-10' union all
select 16, 'T91', null, null, 10, '2010-10-11' union all
select 17, 'T70', null, null, null, '2010-10-15'

create table gcmc
(
id int identity,
gcmc nvarchar(100),
rq datetime
)
insert into gcmc(gcmc, rq)
select 'test1', '2010-5-9' union all
select 'test2', '2011-1-5' union all
select 'test3', '2010-6-18' union all
select 'test4', '2010-8-10' union all
select 'test5', '2010-7-9'

--select * from jglx
--select * from jgmx
--select * from gcmc

declare @sql nvarchar(4000)
set @sql = N' where 1 <> 1 '

select @sql = @sql + N' or isnull(' + Name + N', 0) <> 0' from
(select Name from SysColumns Where id=Object_Id('jgmx') and Name in (select jglx from jglx)) a

set @sql = N'select distinct gcmc from jgmx ' + @sql
set @sql = N'select c.id, c.gcmc from gcmc c inner join (' + @sql + N') b on c.id = b.gcmc and (c.rq >= ''2010-1-1'' and c.rq < ''2011-1-1'')'
exec(@sql)
什么都没留下 2011-01-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 qianjin036a 的回复:]

用动态查询语句.
[/Quote]

…… 就是不知道怎么写啊
-晴天 2011-01-15
  • 打赏
  • 举报
回复
用动态查询语句.
什么都没留下 2011-01-15
  • 打赏
  • 举报
回复
重新发下

如果有这么三张表:
1、表jglx: 字段
id jglx ……
1 平开窗 ……
2 推拉窗 ……
3 平开门 ……
…… …… ……

表1 jglx 中的记录为表2 jgmx 中的字段名
2、表jgmx: 字段
id gcmc zzlh 平开窗 推拉窗 平开门 dates ……
1 15 T80 10 null 15 2010-5-9 ……
2 15 T81 20 null null 2010-1-6 ……
3 16 T90 NULL 10 NULL 2010-9-10 ……
4 16 T91 null null 10 2010-10-11 ……
5 17 T70 NULL NULL NULL 2010-10-15 ……
…… …… …… …… …… …… ……
为表gcmc的id ** 数字为所对应的数量

3、表gcmc: 字段
id gcmc rq ……
1 test 2010-5-9 ……
…… …… 2011-1-5 ……
15 名称 2010-6-18 ……
16 名称2 2010-8-10 ……
17 名称3 2010-7-9 ……
…… ……

求一查询语句:要就得到表3 gcmc 中 的 id 与 gcmc 内容集。条件为,表3中rq在2010年 及 表2字段中有表1(jglx)内容的列不为空或0(如,平开窗不能为null、空或0)。

也就是。通过表1 jglx 求得 表2 的gcmc 值,再根据表3 的rq,求得最后的,id与gcmc

请哪位大虾帮帮忙!

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧