数据库环境: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. [转]笔记本Ubuntu系统关闭独显+省电降温设置

    [转载者按]最近装了Ubuntu 13.04 64 bits版操作系统玩玩,但是发现两个显卡都开着,所以上网查找资料,以在不需要3D的时候关闭Nvidia显卡.通过Bumblebee软件包可以达到这一 ...

  2. (转载)C++ const成员初始化问题

    (转载)http://www.189works.com/article-45135-1.html Const成员如其它任何成员一样,简单考虑其出现在三个位置:全局作用域.普通函数内部.类里面. 下面请 ...

  3. 1003: A Bug

    题目链接:http://172.16.200.33/JudgeOnline/problem.php?id=1003 分析: (1)题意很简单,就是检查一堆数据中是否有同性恋,找出主要矛盾是如果1喜欢2 ...

  4. Bzoj 1878: [SDOI2009]HH的项链 莫队

    1878: [SDOI2009]HH的项链 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 2717  Solved: 1363[Submit][Statu ...

  5. [ZETCODE]wxWidgets教程三:第一个窗体程序

    本教程原文链接:http://zetcode.com/gui/wxwidgets/firstprograms/ 翻译:瓶哥 日期:2013年11月27日星期三 邮箱:414236069@qq.com ...

  6. 【ACM/ICPC2013】线段树题目集合(一)

    前言:前一段时间在网上找了一个线段树题目列表,我顺着做了一些,今天我把做过的整理一下.感觉自己对线段树了解的还不是很深,自己的算法能力还要加强.光练代码能力还是不够的,要多思考.向队友学习,向大牛学习 ...

  7. select * from table where 1=1让您茅塞顿开(转)

    在很多网站上,都经常看到select * from table where 1=1这样的一种查询语句: 这是一种怎样的查询语句呢?首先说明,1=1不是查询语句中的任何关键词,所以,请您放心,不管你会不 ...

  8. ios7新特性实践

    一 iOS 7 新特性:视图控制器切换API 二 iOS 7系列译文:认识 TextKit 三 iOS 7系列译文:iOS7的多任务处理 四 iOS7 最佳实践:一个天气应用案例(上) 五 iOS7 ...

  9. ElasticSearch怎样加入,检索数据

    Elasticsearch是一个分布式的文档(document)存储引擎.它能够实时存储并检索复杂数据结构--序列化的JSON文档.换言说,一旦文档被存储在Elasticsearch中,它就能够在集群 ...

  10. 用C#实现通用守护进程

    1. 下载 源码下载:http://pan.baidu.com/s/1vqDA2 安装包下载:http://pan.baidu.com/s/1sjmEB0p 2. 安装注意事项 在配置档中配置你要守护 ...