Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 存储过程返回外部选择的次数与内部选择的次数相同_Xml_Tsql_Stored Procedures - Fatal编程技术网

Xml 存储过程返回外部选择的次数与内部选择的次数相同

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',

运行存储过程以返回数据库中的所有记录(本例中为手机)及其颜色选项

问题是,当一部手机有4种颜色时,它也会返回ModelGroup 4次

我知道这可能是显而易见的,或者我需要先把它们放在桌子上吗

存储过程:

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