我有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)
你能帮我写一下这些疑问吗? 非常感谢。
答案 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