日期:2014-05-17  浏览次数:20423 次

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.类型))t
group 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,'水浒……