Xml 存储过程返回外部选择的次数与内部选择的次数相同
运行存储过程以返回数据库中的所有记录(本例中为手机)及其颜色选项 问题是,当一部手机有4种颜色时,它也会返回ModelGroup 4次 我知道这可能是显而易见的,或者我需要先把它们放在桌子上吗 存储过程:Xml 存储过程返回外部选择的次数与内部选择的次数相同,xml,tsql,stored-procedures,Xml,Tsql,Stored Procedures,运行存储过程以返回数据库中的所有记录(本例中为手机)及其颜色选项 问题是,当一部手机有4种颜色时,它也会返回ModelGroup 4次 我知道这可能是显而易见的,或者我需要先把它们放在桌子上吗 存储过程: SELECT PB.ModelGroup as '@group', (SELECT PB1.UID as '@pid', PB1.Brand as '@brand', PB1.Title as '@title',
SELECT
PB.ModelGroup as '@group',
(SELECT
PB1.UID as '@pid',
PB1.Brand as '@brand',
PB1.Title as '@title',
PB1.Friendly_URL_Name as '@url',
PB1.Camera as '@camera',
PB1.Storage as '@storage',
PB1.Screen_Size as '@screensize',
PB1.OS as '@os',
PB1.Processor as '@chip',
PB1.Image1 as '@image',
CB.Colour as '@colour'
FROM dbo.Phone_Base PB1
INNER JOIN dbo.Colour_Base CB ON CB.UID = PB1.Colour
WHERE PB1.Active = 1 AND PB.Title = PB1.Title
FOR XML PATH('colours'), TYPE
)
FROM dbo.Phone_Base PB
WHERE PB.Active = 1
ORDER BY PB.ModelGroup
FOR XML PATH('phone'), TYPE
XML输出:
<phone group="iphone6s16gb">
<colours pid="16" brand="1" title="iPhone 6S 16GB" url="iPhone-6S-16GB-Space-Grey" camera="12" storage="16GB" screensize="4.7" os="iOS" chip="A9" image="iphone6s-space-grey.png" colour="Space Grey" />
<colours pid="17" brand="1" title="iPhone 6S 16GB" url="iPhone-6S-16GB-Gold" camera="12" storage="16GB" screensize="4.7" os="iOS" chip="A9" image="iphone6s-gold.png" colour="Gold" />
<colours pid="18" brand="1" title="iPhone 6S 16GB" url="iPhone-6S-16GB-Rose-Gold" camera="12" storage="16GB" screensize="4.7" os="iOS" chip="A9" image="iphone6s-rose-gold.png" colour="Rose Gold" />
<colours pid="19" brand="1" title="iPhone 6S 16GB" url="iPhone-6S-16GB-Silver" camera="12" storage="16GB" screensize="4.7" os="iOS" chip="A9" image="iphone6s-silver.png" colour="Silver" />
</phone>
<phone group="iphone6s16gb">
<colours pid="16" brand="1" title="iPhone 6S 16GB" url="iPhone-6S-16GB-Space-Grey" camera="12" storage="16GB" screensize="4.7" os="iOS" chip="A9" image="iphone6s-space-grey.png" colour="Space Grey" />
<colours pid="17" brand="1" title="iPhone 6S 16GB" url="iPhone-6S-16GB-Gold" camera="12" storage="16GB" screensize="4.7" os="iOS" chip="A9" image="iphone6s-gold.png" colour="Gold" />
<colours pid="18" brand="1" title="iPhone 6S 16GB" url="iPhone-6S-16GB-Rose-Gold" camera="12" storage="16GB" screensize="4.7" os="iOS" chip="A9" image="iphone6s-rose-gold.png" colour="Rose Gold" />
<colours pid="19" brand="1" title="iPhone 6S 16GB" url="iPhone-6S-16GB-Silver" camera="12" storage="16GB" screensize="4.7" os="iOS" chip="A9" image="iphone6s-silver.png" colour="Silver" />
</phone>
<phone group="iphone6s16gb">
<colours pid="16" brand="1" title="iPhone 6S 16GB" url="iPhone-6S-16GB-Space-Grey" camera="12" storage="16GB" screensize="4.7" os="iOS" chip="A9" image="iphone6s-space-grey.png" colour="Space Grey" />
<colours pid="17" brand="1" title="iPhone 6S 16GB" url="iPhone-6S-16GB-Gold" camera="12" storage="16GB" screensize="4.7" os="iOS" chip="A9" image="iphone6s-gold.png" colour="Gold" />
<colours pid="18" brand="1" title="iPhone 6S 16GB" url="iPhone-6S-16GB-Rose-Gold" camera="12" storage="16GB" screensize="4.7" os="iOS" chip="A9" image="iphone6s-rose-gold.png" colour="Rose Gold" />
<colours pid="19" brand="1" title="iPhone 6S 16GB" url="iPhone-6S-16GB-Silver" camera="12" storage="16GB" screensize="4.7" os="iOS" chip="A9" image="iphone6s-silver.png" colour="Silver" />
</phone>
<phone group="iphone6s16gb">
<colours pid="16" brand="1" title="iPhone 6S 16GB" url="iPhone-6S-16GB-Space-Grey" camera="12" storage="16GB" screensize="4.7" os="iOS" chip="A9" image="iphone6s-space-grey.png" colour="Space Grey" />
<colours pid="17" brand="1" title="iPhone 6S 16GB" url="iPhone-6S-16GB-Gold" camera="12" storage="16GB" screensize="4.7" os="iOS" chip="A9" image="iphone6s-gold.png" colour="Gold" />
<colours pid="18" brand="1" title="iPhone 6S 16GB" url="iPhone-6S-16GB-Rose-Gold" camera="12" storage="16GB" screensize="4.7" os="iOS" chip="A9" image="iphone6s-rose-gold.png" colour="Rose Gold" />
<colours pid="19" brand="1" title="iPhone 6S 16GB" url="iPhone-6S-16GB-Silver" camera="12" storage="16GB" screensize="4.7" os="iOS" chip="A9" image="iphone6s-silver.png" colour="Silver" />
</phone>
如果没有实际的桌子,这是在阅读魔法玻璃灯泡,但它可能是这样的:
SELECT
PB.ModelGroup as '@group',
(SELECT
PB1.UID as '@pid',
PB1.Brand as '@brand',
PB1.Title as '@title',
PB1.Friendly_URL_Name as '@url',
PB1.Camera as '@camera',
PB1.Storage as '@storage',
PB1.Screen_Size as '@screensize',
PB1.OS as '@os',
PB1.Processor as '@chip',
PB1.Image1 as '@image',
CB.Colour as '@colour'
FROM dbo.Phone_Base PB1
INNER JOIN dbo.Colour_Base CB ON CB.UID = PB1.Colour
WHERE PB1.ModelGroup=PB.ModelGroup
AND PB1.Active = 1
AND PB.Title = PB1.Title
FOR XML PATH('colours'), TYPE
)
FROM dbo.Phone_Base PB
WHERE PB.Active = 1
GROUP BY PB.ModelGroup
FOR XML PATH('phone'), TYPE
GROUP BY
会将外部SELECT
减少到每个模型组一行。子选择将模型组添加到WHERE
-子句中,从而仅返回相关行…最终和工作存储过程,这要感谢@Shnugo作为指针
SELECT
PB.Title as '@group',
(SELECT
PB1.UID as '@pid',
PB1.Brand as '@brand',
PB1.Title as '@title',
PB1.Friendly_URL_Name as '@url',
PB1.Camera as '@camera',
PB1.Storage as '@storage',
PB1.Screen_Size as '@screensize',
PB1.OS as '@os',
PB1.Processor as '@chip',
PB1.Image1 as '@image',
CB.Colour as '@colour'
FROM
dbo.Phone_Base PB1
INNER JOIN
dbo.Colour_Base CB ON CB.UID = PB1.Colour
WHERE
PB1.Active = 1 AND PB.Title = PB1.Title
FOR XML PATH('colours'), TYPE
)
FROM
dbo.Phone_Base PB
WHERE
PB.Active = 1
GROUP BY
PB.Title
FOR XML PATH('phone'), TYPE
用于发布
表数据的Thx,但这并没有真正的帮助:缺少连接的颜色表,请:将您的输入减少到实际问题(例如ommit not REQUIRED列),一些真正的SQL代码与表,插入和您自己的尝试,使其复制粘贴为我们…感谢您的答复。由于where子句将分组改回标题,无法使用您的准确响应。可能足以将PB.Active
添加到分组列表谢谢,您的回答为我指明了正确的方向,请参见下文。
SELECT
PB.ModelGroup as '@group',
(SELECT
PB1.UID as '@pid',
PB1.Brand as '@brand',
PB1.Title as '@title',
PB1.Friendly_URL_Name as '@url',
PB1.Camera as '@camera',
PB1.Storage as '@storage',
PB1.Screen_Size as '@screensize',
PB1.OS as '@os',
PB1.Processor as '@chip',
PB1.Image1 as '@image',
CB.Colour as '@colour'
FROM dbo.Phone_Base PB1
INNER JOIN dbo.Colour_Base CB ON CB.UID = PB1.Colour
WHERE PB1.ModelGroup=PB.ModelGroup
AND PB1.Active = 1
AND PB.Title = PB1.Title
FOR XML PATH('colours'), TYPE
)
FROM dbo.Phone_Base PB
WHERE PB.Active = 1
GROUP BY PB.ModelGroup
FOR XML PATH('phone'), TYPE
SELECT
PB.Title as '@group',
(SELECT
PB1.UID as '@pid',
PB1.Brand as '@brand',
PB1.Title as '@title',
PB1.Friendly_URL_Name as '@url',
PB1.Camera as '@camera',
PB1.Storage as '@storage',
PB1.Screen_Size as '@screensize',
PB1.OS as '@os',
PB1.Processor as '@chip',
PB1.Image1 as '@image',
CB.Colour as '@colour'
FROM
dbo.Phone_Base PB1
INNER JOIN
dbo.Colour_Base CB ON CB.UID = PB1.Colour
WHERE
PB1.Active = 1 AND PB.Title = PB1.Title
FOR XML PATH('colours'), TYPE
)
FROM
dbo.Phone_Base PB
WHERE
PB.Active = 1
GROUP BY
PB.Title
FOR XML PATH('phone'), TYPE