数据库环境:SQL SERVER 2008R2

有如下需求:

Baker, Cooper, Fletcher, Miller and Smith住在一座房子的不同楼层。
Baker 不住顶层。Cooper不住底层。
Fletcher 既不住顶层也不住底层。Miller住得比Cooper高。
Smith住的楼层和Fletcher不相邻。
Fletcher住的楼层和Cooper不相邻。
用SQL写出来
 
解题思路:
先实现所有人住楼层的排列组合,然后把条件套进去即求得。如何实现排列组合,
具体可以参考我前面的文章 http://www.cnblogs.com/boss-he/p/4534017.html
 
1.基础数据准备
--准备基础数据,用A、B、C、D、E分别表示Baker, Cooper, Fletcher, Miller and Smith
CREATE TABLE ttb
(
subname VARCHAR(1) ,
realname VARCHAR(10)
)
INSERT INTO ttb
VALUES ( 'A', 'Baker' ),
( 'B', 'Cooper' ),
( 'C', 'Fletcher' ),
( 'D', 'Miller' ),
( 'E', 'Smith' )

2.生成所有可能情况的排列组合

--生成A、B、C、D、E所有的排列组合
WITH x0
AS ( SELECT CONVERT(VARCHAR(10), 'A') AS hid
UNION ALL
SELECT CONVERT(VARCHAR(10), 'B') AS hid
UNION ALL
SELECT CONVERT(VARCHAR(10), 'C') AS hid
UNION ALL
SELECT CONVERT(VARCHAR(10), 'D') AS hid
UNION ALL
SELECT CONVERT(VARCHAR(10), 'E') AS hid
),
x1
AS ( SELECT hid
FROM x0
WHERE LEN(hid) <= 5
UNION ALL
SELECT CONVERT(VARCHAR(10), a.hid + b.hid) AS hid
FROM x0 a
INNER JOIN x1 b ON CHARINDEX(a.hid, b.hid, 1) = 0
)
SELECT hid AS name
INTO #tt
FROM x1
WHERE LEN(hid) = 5
ORDER BY hid

3.加入条件,找出满足要求的楼层安排

WITH    x2
AS ( SELECT name
FROM #tt
WHERE SUBSTRING(name, 5, 1) <> 'A'--Baker 不住顶层
AND SUBSTRING(name, 1, 1) <> 'B'--Cooper不住底层
AND ( SUBSTRING(name, 1, 1) <> 'C'
AND SUBSTRING(name, 5, 1) <> 'C'--Fletcher 既不住顶层也不住底层
)
AND name LIKE '%B%D%'--Miller住得比Cooper高
AND name NOT LIKE '%CE%' AND name NOT LIKE '%EC%' --Smith住的楼层和Fletcher不相邻
AND name NOT LIKE '%BC%' AND name NOT LIKE '%CB%' --Fletcher住的楼层和Cooper不相邻
),
x3--生成楼层号
AS ( SELECT number AS id ,
SUBSTRING(x2.name, number, 1) AS name
FROM master.dbo.spt_values
INNER JOIN x2 ON 1 = 1
WHERE type = 'P'
AND number <= 5
AND number >= 1
)
SELECT a.id AS 楼层,
b.realname AS 姓名
FROM x3 a
INNER JOIN ttb b ON b.subname = a.name
ORDER BY id

楼层安排如下:

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHMAAAB1CAIAAADyeEmsAAAFU0lEQVR4nO2dy63bMBBF2VK26iCNMH2kAvURZBVAKUYNvKW8tgFmIVIafs3f8OPMhRH46cn21XnjkcQrKuzX7z/0wHiwV1Bfj2d4hTYaxEa8vh5PIosiIoulfLKMscCP55KAMozm2Yj5FYZKyV52A098r001GvNWn0P2pSOG7hvXrG3AWK3cQ5JyyIaRxdRsntGADduVsab9hiOSPRVTs696xeK0YX+0/ebO5dhYX9lkYaVcS3xPqihMNuZD7ZVRVUQ2vD0tycZ8aDOmpzL77Cviy+78VXZD8NnwOTHWrGUjyXCF41ln8UaWUqTyavbC1+BbZajaHizw3N7aPKNhG+E3n5Lsy2q7cAW8bvCKqFnb4TTdwPAX/vYZr001GniTt9RmqtnGGsRGvIgslr4eT/b1eNID48GOd2KMDfLvRBJCvOkGx3H83UX3x+l1FsWSZYx1J8sY640rQVSzWKKaxVKVmt2+M/6zb83u66LODvgWvfX7uizrXgGjQ4U1u//4JjenAVl/zW6cKUL7ugTYnigvoCOQHbpmUwENRTbYZxuR9dfsvi5MQ7Svy8L5whhjy7qt8skOlzNVvCtPbyMVyQ5dswquAgZQwydXH4A1ewGtXb+fUbNAZ8u1v+8+shfNXmSHr1mIlm8TkR25ZrXDAarZujW7qb2QbJthsnJ1UNodydI5WKpo3ABLVLNYoprFkiQbjhyoZjMkycZkDxTVpErEdIPeFSCEmLMbENnqIrJYIrJYKiV7n1bWHd30e3UKhDUNjESpiCwYCgmHJDW9um3cp/wbHwNutW6AGXxoXnt8co5qke1Xsz6wd4NQvowlMLlxrHMlEec6yRtXh6yVQ6Eohez9l1bPrCXANFgHZMDnqGPuhlUg2warSCJrD7y+XXIO1zKoZd3yO00p2WZYRVKfzSArK1T/1hf08DKybffDKccGkd3AOLKxFvUiCzKSq+cjKu14Vo/JHUv2dVkWc517m0CWXuD2vzwHQz5aI7JY+o/JIovIYumITGt6+xRiUrI1MwqSkqBugCEiiyUiiyUii6VSshvOpegBrw5pY1Seo//m4+NlZO85LRvHZxskC4aufQPhM5G91cJ4FFnf33hWsi3CmrSaheNwelywcTjcVSmb8bktzhRG7rPm1d6uq7yLsxmf25kTRvPDVTeAuCU1fVdbNZvxuZ06FTfInkb0+aJ3EhO8RKLqNhSRHeRKDrPPMr7B/Zg928bIca6n45AVZriBq7g+C7AZ3QBOepZ+q2UzPrd0DlZfRBZLRBZLRBZLB6U1SDoorcGToG6AISKLJSKLJSKLpTpk4dgctleH9LPbhfPkk1SE8aQaZMF5OKpCZOHHZwQ2Q5KVA/FE1lAxWf1WQ6hKJquFMeoHmNnoWY55S7SyLKeQrBwG7U8WDiJKN64wxphLIzdB3oZOvyVaaZZTRBYWx3A1GwhjbLvu2SBFWU4JWfvD+6U1brKeMCaWbFGWU+eoa8SaDYUxrm5gRrqlWc4HkxVWlqRugKb9ytpR+F7ehWwbDWIjUkQWS0QWS0QWSwelNUg6KK3Bk6BugCEiiyUiiyUii6VCsvCa9b7zFOCoqR5ymEOIjVROtv/dTuTdNYx7byz6negnI9vWbtjGypWVjWvx0axkm/WCt2NdG1cjWmpU0FmzmPNpbLflM+16X00PZ884mVbKYFLdzj8DRFLj29n5fWSR59PYbj+DrNyT3SPZbrKI82lst+Vza1pcJfN+R3oZCnUDxPk0ttv559Y4E0P3URfifBrbLZ2D1ReRxRKRxRKRxdJBaQ2SDkprkHTynen/MJpLRBZL/wAMB1CQ1XAk6QAAAABJRU5ErkJggg==" alt="" />

(本文完)

利用SQL进行推理的更多相关文章

  1. 利用SQL Server 2008 R2创建自动备份计划

    本文主要利用SQL Server 2008 R2自带的"维护计划"创建一个自动备份数据的任务. 首先,启动 Sql Management studio,确保"SQL Se ...

  2. 利用SQl对数据库实行数据拆分与组合

    利用SQl对数据库实行数据拆分与组合实现提供以下几种方案: 方法一: WITH CTE AS (SELECT A.Id,A.[Uid],UserName FROM (SELECT A.[id], RE ...

  3. 利用SQL注入漏洞登录后台的实现方法

    利用SQL注入漏洞登录后台的实现方法 作者: 字体:[增加 减小] 类型:转载 时间:2012-01-12我要评论 工作需要,得好好补习下关于WEB安全方面的相关知识,故撰此文,权当总结,别无它意.读 ...

  4. 利用sql批量删除表,存储过程

    利用sql批量删除表,存储过程. 最近用godaddy的空间,由于系统里面的表多,一个个的删除很麻烦,就网上搜集了一下解决方法. 给大家分享一下: 1.批量删除存储过程 declare @procNa ...

  5. 利用 SQL Monitor 查看语句运行状态步骤

    利用 SQL Monitor 查看语句运行状态步骤 1.确定语句被 SQL Monitor 监控 SQL> SELECT * FROM GV$SQL_MONITOR WHERE sql_id=' ...

  6. ASP.net(C#)利用SQL Server实现注册和登陆功能

    说说我现在吧,楼主现在从事的事IT行业,主攻DotNet技术:当然这次上博客园我也是有备而来,所有再次奉献鄙人拙作,以飨诸位,望诸位不吝赐教. 世界上大多数的工作都是熟练性的工种,编程也不例外,做久了 ...

  7. 利用sql命令把结果集输出到文件

    利用sql命令把结果集输出到文件 红色部分的三条命令完成把结果集输出到文件!! [root@test root]# psql -hlocalhost -Utest testWelcome to psq ...

  8. 利用SQL Profiler 追踪数据库操作

    SQL Server 事件探查器 是一个界面,用于创建和管理跟踪并分析和重播跟踪结果. 这些事件保存在一个跟踪文件中,稍后试图诊断问题时,可以对该文件进行分析或用它来重播一系列特定的步骤. SQL S ...

  9. KPPW2.5 漏洞利用--SQL注入

    KPPW2.5 漏洞利用--SQL注入 SQL注入--布尔型盲注 环境搭建 1,集成环境简单方便,如wamp,phpstudy.... 2,KPPW v2.2源码一份(文末有分享)放到WWW目录下面 ...

随机推荐

  1. 【转】iOS Provisioning Profile(Certificate)与Code Signing详解 -- 待看

    原文网址:http://blog.sina.com.cn/s/blog_82c8198f0102vy4j.html 引言 关于开发证书配置(Certificates & Identifiers ...

  2. Remarks on a preprint

    Page 2 Line 1, "reads" should be "read". Page 2 Line 5, "are initial veloci ...

  3. Intersoft Mobile Studio 2013 R1 SP1 Crack

    Intersoft Mobile Studio 2013 R1 SP1 (iOS, Android & WinR) Leave a comment   tweet       inShare ...

  4. C++ STL map

    这个链接里面对map的讲解比较好. http://blog.csdn.net/iicy266/article/details/11906189

  5. PHP中 magic_quotes_gpc 和 magic_quotes_runtime 区别及其反斜线转义问题

    php中关于反斜线转义: php中数据的魔法引用函数 magic_quotes_gpc  或 magic_quotes_runtime     设置为on时,当数据遇到 单引号' 和 双引号" ...

  6. 2 weekend110的zookeeper的原理、特性、数据模型、节点、角色、顺序号、读写机制、保证、API接口、ACL、选举、 + 应用场景:统一命名服务、配置管理、集群管理、共享锁、队列管理

    在hadoop生态圈里,很多地方都需zookeeper. 启动的时候,都是普通的server,但在启动过程中,通过一个特定的选举机制,选出一个leader. 只运行在一台服务器上,适合测试环境:Zoo ...

  7. LINUX下mysql的大小写是否区分设置 转

    一.Linux中MySQL大小写详情:1.数据库名严格区分大小写2.表名严格区分大小写的3.表的别名严格区分大小写4.变量名严格区分大小写5.列名在所有的情况下均忽略大小写6.列的别名在所有的情况下均 ...

  8. Java学习——数据类型【2】

    1. 对象与类 对象:类的一个实例,有状态和行为. 类:一个模板,描述一类对象的行状态和行为. 2. 类可以包含的变量 类型 局部变量 成员变量 类变量(静态变量) 定义位置 方法.或语句块中 类中, ...

  9. FZU2138-久违的月赛之一

    Problem Description 好久没举月赛了,这次lqw给大家出了5道题,因为hsy学长宣传的很到位,吸引了n个DDMM们来做,另一位kk学长说,全做对的要给金奖,做对4题要给银奖,做对3题 ...

  10. 设置myeclipse自动生成的author等注释

    一.window->preference->java->code    styple->code Template 当你选择到这部的时候就会看见右侧有一个框显示出code这个选 ...