zoukankan      html  css  js  c++  java
  • 龌龊的sql,说明了设计的不足

    drop table #tableMain
    drop table #tableChild1
    drop table #tableChild2


    create table #tableMain(mainId int, mainName varchar(10))
    create table #tableChild1(mainId int, ChildId int, ChildName varchar(10))
    create table #tableChild2(mainId int, ChildId int, ChildName varchar(10))

    insert into #tableMain values(1,'第1条单据')
    insert into #tableChild1 values(1,1,'第1条信息')
    insert into #tableChild1 values(1,2,'第2条信息')
    insert into #tableChild1 values(1,3,'第3条信息')
    insert into #tableChild2 values(1,1,'第1个人')
    insert into #tableChild2 values(1,2,'第2个人')
    insert into #tableChild2 values(1,3,'第3个人')

    --
    insert into #tableMain values(2,'第2条单据')
    insert into #tableChild1 values(2,1,'2-1条信息')
    insert into #tableChild1 values(2,2,'2-2条信息')
    insert into #tableChild1 values(2,3,'2-3条信息')
    insert into #tableChild2 values(2,1,'2-1个人')
    insert into #tableChild2 values(2,2,'2-2个人')
    insert into #tableChild2 values(2,3,'2-3个人')


    select * from #tableMain A, #tableChild1 B, #tableChild2 C
    where A.mainId = B.mainId and A.mainId = C.mainId
    mainId mainName mainId ChildId ChildName mainId ChildId ChildName
    1 第1条单据 1 1 第1条信息 1 1 第1个人
    1 第1条单据 1 2 第2条信息 1 1 第1个人
    1 第1条单据 1 3 第3条信息 1 1 第1个人
    1 第1条单据 1 1 第1条信息 1 2 第2个人
    1 第1条单据 1 2 第2条信息 1 2 第2个人
    1 第1条单据 1 3 第3条信息 1 2 第2个人
    1 第1条单据 1 1 第1条信息 1 3 第3个人
    1 第1条单据 1 2 第2条信息 1 3 第3个人
    1 第1条单据 1 3 第3条信息 1 3 第3个人
    2 第2条单据 2 1 2-1条信息 2 1 2-1个人
    2 第2条单据 2 2 2-2条信息 2 1 2-1个人
    2 第2条单据 2 3 2-3条信息 2 1 2-1个人
    2 第2条单据 2 1 2-1条信息 2 2 2-2个人
    2 第2条单据 2 2 2-2条信息 2 2 2-2个人
    2 第2条单据 2 3 2-3条信息 2 2 2-2个人
    2 第2条单据 2 1 2-1条信息 2 3 2-3个人
    2 第2条单据 2 2 2-2条信息 2 3 2-3个人
    2 第2条单据 2 3 2-3条信息 2 3 2-3个人

    select * from #tableMain A,
    (select * from #tableChild1 where ChildId in(select min(ChildId) from #tableChild1 group by mainId)) B,
    (select * from #tableChild2 where ChildId in(select min(ChildId) from #tableChild2 group by mainId)) C
    where A.mainId = B.mainId and A.mainId = C.mainId

    mainId mainName mainId ChildId ChildName mainId ChildId ChildName
    1 第1条单据 1 1 第1条信息 1 1 第1个人
    2 第2条单据 2 1 2-1条信息 2 1 2-1个人

    select *,
    case when B.counts >1 then B.ChildName +',等' else B.ChildName end as Child1Name0 ,
    case when C.counts >1 then C.ChildName +',等' else C.ChildName end as Child2Name0
    from #tableMain A,
    (select F.*,E.counts from #tableChild1 F,
    (select count(1) counts,min(ChildId) ChildId,mainId from #tableChild1 D group by mainId) E
    where F.ChildId = E.ChildId and F.mainId = E.mainId) B,
    (select F.*,E.counts from #tableChild2 F,
    (select count(1) counts,min(ChildId) ChildId,mainId from #tableChild2 D group by mainId) E
    where F.ChildId = E.ChildId and F.mainId = E.mainId) C
    where A.mainId = B.mainId and A.mainId = C.mainId

    mainId mainName mainId ChildId ChildName counts mainId ChildId ChildName counts Child1Name0 Child2Name0
    1 第1条单据 1 1 第1条信息 3 1 1 第1个人 3 第1条信息,等 第1个人,等
    2 第2条单据 2 1 2-1条信息 3 2 1 2-1个人 3 2-1条信息,等 2-1个人,等

  • 相关阅读:
    HDU 1520 Anniversary party(简单树形DP)
    HDU 4398 Template Library Management(贪心,STL)
    HDU 2829 Lawrence(斜率优化DP)
    HDU 2993 MAX Average Problem(斜率优化DP)
    HDU 3507 Print Article(斜率DP优化)
    转:操作系统各大公司笔试题汇总
    转载 ANSI、Unicode、UTF8相互转化的函数
    2011 各大IT公司笔试面试题目
    Windows Media Format SDK系统概述
    limits.h
  • 原文地址:https://www.cnblogs.com/zzlchn/p/2153664.html
Copyright © 2011-2022 走看看