ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 查询语句

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-3-25 19:23 | 显示全部楼层 |阅读模式
表1:
编号             名称
10                水果
10.01           苹果
10.01.01      红富士

要生成如下的查询格式:
编号                   全称
10                     水果
10.01            水果/苹果
10.01.01       水果/苹果/红富士
如何用一句SQL解决?


TA的精华主题

TA的得分主题

发表于 2014-3-26 09:36 | 显示全部楼层
  1. USE tempdb
  2. GO
  3. IF OBJECT_ID('test') IS NOT NULL
  4.   DROP TABLE test;
  5. GO
  6. CREATE TABLE test
  7. (
  8.   id    varchar(10),
  9.   name  nvarchar(10)
  10. );
  11. GO
  12. INSERT INTO test VALUES('10','水果');
  13. INSERT INTO test VALUES('10.10','苹果');
  14. INSERT INTO test VALUES('10.10.10','红富士');
  15. GO
  16. ----------------------------------------
  17. select c.id,a.name+case when b.name=a.name then '' else '/'+b.name end+case when c.name=b.name then '' else '/'+c.name end as name
  18. from test as a
  19. join test as b
  20. on a.id = LEFT(b.id,2)
  21. join test as c
  22. on b.id = LEFT(c.id,5)
  23. ----------------------------------------
  24. /*
  25. id         name
  26. ---------- --------------------------------
  27. 10         水果
  28. 10.10      水果/苹果
  29. 10.10.10   水果/苹果/红富士

  30. (3 行受影响)
  31. */
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-3-28 21:49 | 显示全部楼层
非常感谢,但CASE语句还是不会使用,得不到想要的结果.现在重新上传附件.
要求:根据表1和代码表生成查询1 (注意查询1的全称字段)
数据.rar (14.79 KB, 下载次数: 3)

表1:
编号             名称
10                水果
10.01           苹果
10.01.01      红富士

代码表:
ID     编号
1      10.01
2      10.01.01
3      10
4      10.01

查询1
编号                   全称
10                     水果
10.01            水果/苹果
10.01            水果/苹果
10.01.01       水果/苹果/红富士
如何用一句SQL解决?

TA的精华主题

TA的得分主题

发表于 2014-3-29 14:07 | 显示全部楼层
  1. select c.编号,a.名称+IIF(b.名称=a.名称,"",'/'+b.名称)+IIF(c.名称=b.名称,"", '/'+c.名称) as 名称
  2. from (表1 AS a
  3. INNER join 表1 as b
  4. on a.编号 = LEFT(b.编号,2))
  5. INNER join 表1 as c
  6. on b.编号 = LEFT(c.编号,5)
复制代码
case when 可用IIF代替
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-27 13:57 , Processed in 0.026807 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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