当前位置: 代码迷 >> Sql Server >> qsl 话语
  详细解决方案

qsl 话语

热度:64   发布时间:2016-04-27 11:30:48.0
qsl 语句
C# code
                   表A                               表B            ID         书名         类型         书名        类型            时间  1          三国         小说         三国        小说           2011-01-01  2          水浒         小说         水浒        小说           2011-01-02  3          萌芽         null         萌芽        刊物           2011-01-03  4          柯南         漫画         三国        null           2011-01-04  5          死神         漫画         null        漫画           2011-01-05


表A ID 和书名 是唯一且 不能为空 表B 时间 不能为空 书名和类型 可以为空 但不能同时为空
要求: 当表B中 类型不为空时 以类型为连接 获取ID 并且时间为最新的 如 4 柯南 漫画 2011-01-05
 当类型为空时 以书名为连接 获取ID 并且时间为最新的 如 1 三国 2011-01-4



------解决方案--------------------
SQL code
select ID,书名,max(时间) 时间from(select ID,A.书名,A.类型,B.时间from A inner join B on (A.书名=B.书名 or A.类型=B.类型))tgroup by t.ID,t.书名order by t.ID
------解决方案--------------------
SQL code
select *  from(          case when B.leixing is not null then           (select  A.ID,A.shuming,A.leixing,MAX(B.time) from A left join B             on A.leixing=B.leixing)     else         (select A.ID,B.shuming,B.time from A left join B             on A.shuming=B.shuming )     end)t
------解决方案--------------------
探讨

SQL code
--> 测试数据:[ta]
IF OBJECT_ID('[ta]') IS NOT NULL DROP TABLE [ta]
GO
CREATE TABLE [ta]([ID] INT,[shuming] VARCHAR(4),[leixing] VARCHAR(4))
INSERT [ta]
SELECT 1,'三国','小说' UNION ALL
SELECT 2,'水浒……
  相关解决方案