ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: flyhorse55

[求助] 求SQL语句一条

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-12-28 11:50 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
弄个虚拟附件和手工效果,数据只要能说明情况即可,不需要多.

TA的精华主题

TA的得分主题

发表于 2012-12-28 12:07 | 显示全部楼层
用排名函数可以
表1排名1的对应表2排名1的
表1排名2的对应表2排名2的

TA的精华主题

TA的得分主题

发表于 2012-12-28 12:26 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
[code=sql]USE tempdb
IF OBJECT_ID('TEST1') IS NOT NULL
  DROP TABLE TEST1;      
GO
CREATE TABLE TEST1      
(
  name char(1),num int,sdate date,id varchar(10)
);
GO
IF OBJECT_ID('TEST2') IS NOT NULL
  DROP TABLE TEST2;      
GO
CREATE TABLE TEST2      
(
  name char(1),num int,sdate date,id varchar(10)
);
GO
INSERT INTO TEST1 VALUES
('a',1,'2012-4-2','0011223'),
('b',2,'2012-5-2','0011224'),
('c',1,'2012-6-2','0011225'),
('a',1,'2012-7-2','0011226'),
('b',3,'2012-8-2','0011227'),
('c',5,'2012-9-2','0011228');
GO
INSERT INTO TEST2 VALUES
('a',1,'2012-4-2','0011223'),
('b',2,'2012-5-2','0011224'),
('c',1,'2012-6-2','0011225'),
('a',1,'2012-7-2','0011226'),
('c',5,'2012-9-2','0011228');
GO
-------------------------------------
SELECT A.name,A.num,A.id,B.id AS id2
FROM
(
  SELECT name,num,id,
  (
        SELECT SUM(1)
        FROM TEST1
        WHERE name=a.name
          AND num=a.num
          AND sdate<=a.sdate
  ) AS ranks
  FROM TEST1 AS a
) AS A
INNER JOIN
(
  SELECT name,num,id,
  (
        SELECT SUM(1)
        FROM TEST2
        WHERE name=a.name
          AND num=a.num
          AND sdate<=a.sdate
  ) AS ranks
  FROM TEST2 AS a
) AS B
ON A.name=B.name
AND A.num=B.num
AND A.ranks=B.ranks
-------------------------------------
/*
name num         id         id2
---- ----------- ---------- ----------
a    1           0011223    0011223
b    2           0011224    0011224
c    1           0011225    0011225
a    1           0011226    0011226
c    5           0011228    0011228

(5 行受影响)
*/
[/code]

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-12-29 11:11 | 显示全部楼层
还是有问题
amazeyeli,如果表1有两个相同的名称、数量、日期(但号码不同的话),那么找不到表2对应的记录
如 表1 ('a',1,'2012-4-2','0011111'),
          ('a',1,'2012-4-2','0021111'),
表2 (('a',1,'2012-4-2','0011111'),
会找不到匹配的记录
是不是SELECT SUM(1)
        FROM TEST2
        WHERE name=a.name
          AND num=a.num
          AND sdate<=a.sdate
  ) AS ranks
有问题,要怎么改呢?

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-12-29 11:13 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 flyhorse55 于 2012-12-29 11:14 编辑

ranks应返回的是相同name的次序号,譬如1,2,3,4.....不应该是不同name有重复的ranks,这样才会一对一

TA的精华主题

TA的得分主题

发表于 2012-12-29 11:22 | 显示全部楼层
你的要求是按id排序,这样的话,date字段几乎没什么用,语句改成
(
  SELECT SUM(1)
   FROM TEST2
   WHERE name=a.name
       AND num=a.num
       AND id<=id
) AS ranks

TA的精华主题

TA的得分主题

发表于 2012-12-29 11:25 | 显示全部楼层
SELECT A.name,A.num,A.id,B.id AS id2
FROM
(
  SELECT name,num,id,
  (
        SELECT SUM(1)
        FROM TEST1
        WHERE name=a.name
          AND num=a.num
          AND id<=a.id
  ) AS ranks
  FROM TEST1 AS a
) AS A
INNER JOIN
(
  SELECT name,num,id,
  (
        SELECT SUM(1)
        FROM TEST2
        WHERE name=a.name
          AND num=a.num
          AND id<=a.id
  ) AS ranks
  FROM TEST2 AS a
) AS B
ON A.name=B.name
AND A.num=B.num
AND A.ranks=B.ranks
-------------------------------------

TA的精华主题

TA的得分主题

发表于 2012-12-29 11:41 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
这个查询是在ACCESS还是EXCEL里去实现,还是SQL SERVER里去实现呢?
从LZ的描述来看,没有唯一值对应,也就无法达到我之前那个查询的前提条件,那不可能用查询来做成,因为两个表都在动态不确定的情况下进行对应
SQL SEVER 里就像 amazeyeli  一样,用过程来处理了,就好比LZ用VBA的方式来进行是一样的,首先要确定LZ的数据是在哪里的,才好决定采用哪种方式

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-12-29 11:59 | 显示全部楼层
数据在EXCEL里,难道不能用VBA利用ADO连接SQL语句来做吗

TA的精华主题

TA的得分主题

发表于 2012-12-29 12:36 | 显示全部楼层
flyhorse55 发表于 2012-12-29 11:59
数据在EXCEL里,难道不能用VBA利用ADO连接SQL语句来做吗

尽管到现在还不懂楼主表达的题意,但如果用排名来实现的话,两表分别有10万条记录,还是存储在Excel中,使用SQL可能还真跑不起来,建议楼主改在VBA板块里看看VBA中有没有更好的方法。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-18 01:31 , Processed in 0.032045 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表