多表查询并排序的问题

youzhj 2010-06-17 06:28:05
表t1:
A B C
-------------------------------
2010-03-05 aaa 1
2010-03-06 bbb 2
2010-03-07 ccc 3
2010-03-08 ddd 4
表t2:
D E F
-------------------------------
2010-03-05 eee 1
2010-03-06 fff 2
2010-03-07 ggg 3
2010-03-08 hhh 5

想得到的结果:
A B C
-------------------------------
2010-03-05 aaa 1
2010-03-05 ggg 3
2010-03-06 eee 1
2010-03-06 ccc 3
2010-03-07 bbb 2
2010-03-07 fff 2
2010-03-08 ddd 4
2010-03-08 hhh 5
...全文
171 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
youzhj 2010-06-18
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 jaydom 的回复:]
在excel表中第一行放设备C的信息,第二行放设备F的信息......一直这样循环下去还是只第一行第二行交叉,其他又是另外一种组合方式?
[/Quote]这个只是举个例子,不会循环的,一个设备在excel表中只会占一行的,如果有100个设备的话,那就只有100行,是这个意思。
youzhj 2010-06-18
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 jaydom 的回复:]
引用 24 楼 youzhj 的回复:
看来这个问题很难啊

使我们没明白你的意思吧,总感觉有点别扭
[/Quote]我也觉得别扭,呵呵,确实我感觉我还没有讲清楚。
jaydom 2010-06-18
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 youzhj 的回复:]
看来这个问题很难啊
[/Quote]
使我们没明白你的意思吧,总感觉有点别扭
jaydom 2010-06-18
  • 打赏
  • 举报
回复
在excel表中第一行放设备C的信息,第二行放设备F的信息......一直这样循环下去还是只第一行第二行交叉,其他又是另外一种组合方式?
youzhj 2010-06-18
  • 打赏
  • 举报
回复
看来这个问题很难啊
永生天地 2010-06-18
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 youzhj 的回复:]
引用 21 楼 jaydom 的回复:
引用 20 楼 youzhj 的回复:
引用 18 楼 jaydom 的回复:
引用 17 楼 youzhj 的回复:
引用 15 楼 jaydom 的回复:
引用 14 楼 youzhj 的回复:
我举个例子吧:比如有4个设备,它们设备号存入字段C中,分别为3,6,9,35,我现在就是要按照9,6,35,3的顺序来排列输出到excel表中指定位……
[/Quote]

可以把excel模板放到服务器的指定文件夹里,
查询时把excel和t1,t2连接一起查询,试试看
youzhj 2010-06-18
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 jaydom 的回复:]
引用 20 楼 youzhj 的回复:
引用 18 楼 jaydom 的回复:
引用 17 楼 youzhj 的回复:
引用 15 楼 jaydom 的回复:
引用 14 楼 youzhj 的回复:
我举个例子吧:比如有4个设备,它们设备号存入字段C中,分别为3,6,9,35,我现在就是要按照9,6,35,3的顺序来排列输出到excel表中指定位置。排序方式本身没有规律可循。

是不……
[/Quote]真想当面给解释一下,文字上真难说明白,实在抱歉。设备A、B、C、D的设备号为1,2,3,4存入了表t1的C字段中,设备E、F、G、H的设备号存入了表t2的F字段中。但是呢,C和F又有相同的值,就是说虽然值相同,但是因为在不同的表中,它们代表的设备是不同的。
现在就是给定了一个排序方式,在excel表中第一行放设备C的信息,第二行放设备F的信息......就是说excel中格式就固定那了,就得按照excel里面的设备先后顺序来查询表中的数据,然后导入到excel的指定位置,不知这样说能否明白?
jaydom 2010-06-18
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 youzhj 的回复:]
引用 18 楼 jaydom 的回复:
引用 17 楼 youzhj 的回复:
引用 15 楼 jaydom 的回复:
引用 14 楼 youzhj 的回复:
我举个例子吧:比如有4个设备,它们设备号存入字段C中,分别为3,6,9,35,我现在就是要按照9,6,35,3的顺序来排列输出到excel表中指定位置。排序方式本身没有规律可循。

是不是B、C两个字段能唯一确定那个设备?如果那……
[/Quote]
那你的意思与你给的结果就有冲突了,t1表与t2表合并后的排序方式就根本没有规律了
youzhj 2010-06-18
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 jaydom 的回复:]
引用 17 楼 youzhj 的回复:
引用 15 楼 jaydom 的回复:
引用 14 楼 youzhj 的回复:
我举个例子吧:比如有4个设备,它们设备号存入字段C中,分别为3,6,9,35,我现在就是要按照9,6,35,3的顺序来排列输出到excel表中指定位置。排序方式本身没有规律可循。

是不是B、C两个字段能唯一确定那个设备?如果那样的话可以建一个表用来存事先已经确定好顺序……
[/Quote]与b字段无关,t1表中B字段和t2表中E字段都是从设备读上来的值。
zouyx317 2010-06-18
  • 打赏
  • 举报
回复
看了前面说的终于明白了一些,加个排序表吧:

--> 生成测试数据表: [t1]
IF OBJECT_ID('[t1]') IS NOT NULL
DROP TABLE [t1]
GO
CREATE TABLE [t1] ([A] [datetime],[B] [nvarchar](10),[C] [int])
INSERT INTO [t1]
SELECT '2010-03-05','aaa','1' UNION ALL
SELECT '2010-03-06','bbb','2' UNION ALL
SELECT '2010-03-07','ccc','3' UNION ALL
SELECT '2010-03-08','ddd','4'

--> 生成测试数据表: [t2]
IF OBJECT_ID('[t2]') IS NOT NULL
DROP TABLE [t2]
GO
CREATE TABLE [t2] ([D] [datetime],[E] [nvarchar](10),[F] [int])
INSERT INTO [t2]
SELECT '2010-03-05','eee','1' UNION ALL
SELECT '2010-03-06','fff','2' UNION ALL
SELECT '2010-03-07','ggg','3' UNION ALL
SELECT '2010-03-08','hhh','5'



-->生成排序表: [TOrder]
IF OBJECT_ID('[TOrder]') IS NOT NULL
DROP TABLE [TOrder]

Create Table TOrder
(ENO varchar(10) not null,
ECode int not null,
idx int
)

go

insert into Torder
Select 'aaa', 1,1
union select 'bbb', 2,5
union select 'ccc', 3,4
union select 'ddd', 4,7
union select 'eee', 1,3
union select 'fff', 2,6
union select 'ggg', 3,2
union select 'hhh', 5,8
go



-->SQL查询如下:
Select A.* from (SELECT * FROM [t1]
UNION ALL
SELECT * FROM [t2]) A
Left join TOrder I on I.ENo=A.B and I.Ecode=A.C
ORDER BY I.Idx,1

A B C
------------------------------------------------------ ---------- -----------
2010-03-05 00:00:00.000 aaa 1
2010-03-07 00:00:00.000 ggg 3
2010-03-05 00:00:00.000 eee 1
2010-03-07 00:00:00.000 ccc 3
2010-03-06 00:00:00.000 bbb 2
2010-03-06 00:00:00.000 fff 2
2010-03-08 00:00:00.000 ddd 4
2010-03-08 00:00:00.000 hhh 5

(所影响的行数为 8 行)
jaydom 2010-06-18
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 youzhj 的回复:]
引用 15 楼 jaydom 的回复:
引用 14 楼 youzhj 的回复:
我举个例子吧:比如有4个设备,它们设备号存入字段C中,分别为3,6,9,35,我现在就是要按照9,6,35,3的顺序来排列输出到excel表中指定位置。排序方式本身没有规律可循。

是不是B、C两个字段能唯一确定那个设备?如果那样的话可以建一个表用来存事先已经确定好顺序方式,然后在对合并好的数据做连接,输出你要……
[/Quote]
你不是还有一个b字段吗?
youzhj 2010-06-18
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 jaydom 的回复:]
引用 14 楼 youzhj 的回复:
我举个例子吧:比如有4个设备,它们设备号存入字段C中,分别为3,6,9,35,我现在就是要按照9,6,35,3的顺序来排列输出到excel表中指定位置。排序方式本身没有规律可循。

是不是B、C两个字段能唯一确定那个设备?如果那样的话可以建一个表用来存事先已经确定好顺序方式,然后在对合并好的数据做连接,输出你要的顺序
[/Quote]是的,就是这个意思。但是两个表的设备号字段值有重复的啊,这个问题实在想不出来。帮帮忙吧,谢谢哈。
永生天地 2010-06-18
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 youzhj 的回复:]
我举个例子吧:比如有4个设备,它们设备号存入字段C中,分别为3,6,9,35,我现在就是要按照9,6,35,3的顺序来排列输出到excel表中指定位置。排序方式本身没有规律可循。
[/Quote]
增加排序字段试试
jaydom 2010-06-18
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 youzhj 的回复:]
我举个例子吧:比如有4个设备,它们设备号存入字段C中,分别为3,6,9,35,我现在就是要按照9,6,35,3的顺序来排列输出到excel表中指定位置。排序方式本身没有规律可循。
[/Quote]
是不是B、C两个字段能唯一确定那个设备?如果那样的话可以建一个表用来存事先已经确定好顺序方式,然后在对合并好的数据做连接,输出你要的顺序
youzhj 2010-06-18
  • 打赏
  • 举报
回复
我举个例子吧:比如有4个设备,它们设备号存入字段C中,分别为3,6,9,35,我现在就是要按照9,6,35,3的顺序来排列输出到excel表中指定位置。排序方式本身没有规律可循。
youzhj 2010-06-18
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 xys_777 的回复:]
引用 10 楼 youzhj 的回复:
排序方式是按照设备号排列的,是事先已经确定好的,哪个设备放在第几行都是固定的。


事先已经确定好-------怎么确定的?如果没有明确的排序字段是没法做的
[/Quote]能建排序表吗?之前有各类似的问题,但是只是针对一个表的设备号字段排序,当时的设备号字段值都是唯一的,所以排序表能解决。现在是两个表,而且设备号字段值不唯一,显得很困难了。
永生天地 2010-06-18
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 youzhj 的回复:]
排序方式是按照设备号排列的,是事先已经确定好的,哪个设备放在第几行都是固定的。
[/Quote]

事先已经确定好-------怎么确定的?如果没有明确的排序字段是没法做的
youzhj 2010-06-18
  • 打赏
  • 举报
回复
帮帮忙哈,问题已解决马上给分。
youzhj 2010-06-18
  • 打赏
  • 举报
回复
我没表示清楚,再改改:

表t1:
A B C
-------------------------------
2010-03-05 aaa 1
2010-03-05 bbb 2
2010-03-05 ccc 3
2010-03-05 ddd 4
表t2:
D E F
-------------------------------
2010-03-05 eee 1
2010-03-05 fff 2
2010-03-05 ggg 3
2010-03-05 hhh 5

想得到的结果:
A B C
-------------------------------
2010-03-05 aaa 1
2010-03-05 ggg 3
2010-03-05 eee 1
2010-03-05 ccc 3
2010-03-05 bbb 2
2010-03-05 fff 2
2010-03-05 ddd 4
2010-03-05 hhh 5

C和F其实是代表设备号,每个设备号本身是不同的,但是由于建表时没考虑完全,将不同类型的设备号分开存储了,这样两表中代表设备号的C和F就出现了相同值。
但是现在又需要将所有设备统计在一起,按理说将两表合并,并且代表设备号的字段值都不重复就好了,但是现在系统已经运行,没法更改。
排序方式是按照设备号排列的,是事先已经确定好的,哪个设备放在第几行都是固定的。
不知道我说清楚了没有,请大家帮帮忙吧,谢谢了。
wqmgxj 2010-06-17
  • 打赏
  • 举报
回复
--> 生成测试数据表: [t1]
IF OBJECT_ID('[t1]') IS NOT NULL
DROP TABLE [t1]
GO
CREATE TABLE [t1] ([A] [datetime],[B] [nvarchar](10),[C] [int])
INSERT INTO [t1]
SELECT '2010-03-05','aaa','1' UNION ALL
SELECT '2010-03-07','bbb','2' UNION ALL
SELECT '2010-03-06','ccc','3' UNION ALL
SELECT '2010-03-08','ddd','4'

--> 生成测试数据表: [t2]
IF OBJECT_ID('[t2]') IS NOT NULL
DROP TABLE [t2]
GO
CREATE TABLE [t2] ([D] [datetime],[E] [nvarchar](10),[F] [int])
INSERT INTO [t2]
SELECT '2010-03-06','eee','1' UNION ALL
SELECT '2010-03-07','fff','2' UNION ALL
SELECT '2010-03-05','ggg','3' UNION ALL
SELECT '2010-03-08','hhh','5'


-->SQL查询如下:

SELECT * FROM [t1]
UNION ALL
SELECT * FROM [t2]
ORDER BY A,C,B
[Executed: 10-6-17 上午11时41分34秒 ] [Execution: 0/ms]


4 record(s) affected

A B C
------------------- ---- ----
2010-3-5 上午12:00:00 aaa 1
2010-3-5 上午12:00:00 ggg 3
2010-3-6 上午12:00:00 eee 1
2010-3-6 上午12:00:00 ccc 3
2010-3-7 上午12:00:00 bbb 2
2010-3-7 上午12:00:00 fff 2
2010-3-8 上午12:00:00 ddd 4
2010-3-8 上午12:00:00 hhh 5

8 record(s) selected [Fetch MetaData: 0/ms] [Fetch Data: 0/ms]

[Executed: 10-6-17 上午11时41分34秒 ] [Execution: 16/ms]
加载更多回复(8)

34,590

社区成员

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

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