级联查询SQL SERVER

时间:2014-03-05 13:36:37

标签: sql sql-server

我有3个SQL SERVER数据表:

TBL_HOUSE:

|"ID_HOUSE"|"ID_PERSONS"|"QTY_PERSONS"|  
|"1"       |"|1|2|3|"   |"|1|2|1|"    |  
|"2"       |"|2|"       |"|3|"        |  

TBL_PERSON:

|"ID_PERSON"|"ID_PETS"|"QTY_PETS"|  
|"1"        |"|3|1|"  |"|1|2|"   |  
|"2"        |"|1|2|"  |"|3|1|"   |  

TBL_PET:

|"ID_PET"|"PET_TYPE"|"PET_PRICE"|  
|"1"     |"DOG"     |"500"    |  
|"2"     |"CAT"     |"200"    |  

我必须提出两个问题 第一个用于检索房屋中每个PET的数量。

即。 :在HOUSE“2”中,有3个PERSON“2”
对于每个人“2”,有3个DOG和1个CAT 在HOUSE中总共“2”是9个DOG和3个CAT。

第二个获得宠物在房子里的总价值 在HOUSE“2”中,总值为5100.(3 *(3 * 500 + 1 * 200)= 5100)

你能帮我写一下这些疑问吗? 非常感谢。

1 个答案:

答案 0 :(得分:0)

对不起,这就是我能为你做的一切。你的数据库设计让我感到恶心。

此查询以TBL_Person形式返回NORMAL表格。我希望你足够聪明,可以对另一张表做同样的事情并计算你需要的所有金额。

 WITH Split(id_person, stpos_pets, stpos_qpets,endpos_pets, endpos_qpets) 
    AS(
        SELECT id_person, 0 AS stpos_pets, 0 AS stpos_qpets, CHARINDEX('|',id_pets) AS endpos_pets, CHARINDEX('|',qty_pets) AS endpos_qpets
        from TBL_PERSON
        UNION ALL
        SELECT TBL_PERSON.id_person, endpos_pets+1,endpos_qpets+1, CHARINDEX('|',id_pets,endpos_pets+1),CHARINDEX('|',qty_pets,endpos_qpets+1)
            FROM TBL_PERSON,Split
            WHERE endpos_pets > 0 AND #t.id_person=split.id_person
    )

    SELECT 'Id' = TBL_PERSON.id_person,
        'Pets' = SUBSTRING(id_pets,stpos_pets,COALESCE(NULLIF(endpos_pets,0),LEN('|3|1|')+1)-stpos_pets),
        'Quantity' = SUBSTRING(qty_pets,stpos_qpets,COALESCE(NULLIF(endpos_qpets,0),LEN('|3|1|')+1)-stpos_qpets)
    FROM Split,TBL_PERSON
    Where stpos_pets>0 and endpos_pets>0 and stpos_qpets>0 and endpos_qpets>0 and TBL_PERSON.id_person=split.id_person