每个属性的多个值是否可以从SELECT语句中单独列出?

iam*_*tio 3 xml sql t-sql sql-server

我先前问过一个非常类似的问题但是现在我需要相同的结果,但输入不同.

示例代码:

CREATE TABLE #Temp (
    [@name] VARCHAR(200),
    [Value] VARCHAR(200)
)

INSERT INTO #Temp ([@name], [Value]) 
SELECT 'Fruit', 'Apple' UNION
SELECT 'Fruit', 'Orange' UNION
SELECT 'Fruit', 'Grape'
Run Code Online (Sandbox Code Playgroud)

选择声明

SELECT
    [@name],
    [Value]
FROM #Temp
FOR XML PATH ('Produce'), ROOT('ProduceMaster'), TYPE
Run Code Online (Sandbox Code Playgroud)

结果

<ProduceMaster>
  <Produce name="Fruit">
    <Value>Apple</Value>
  </Produce>
  <Produce name="Fruit">
    <Value>Grape</Value>
  </Produce>
  <Produce name="Fruit">
    <Value>Orange</Value>
  </Produce>
</ProduceMaster>
Run Code Online (Sandbox Code Playgroud)

期望的结果

<ProduceMaster>
  <Produce name="Fruit">
    <Value>Apple</Value>
    <Value>Grape</Value>
    <Value>Orange</Value>
  </Produce>
</ProduceMaster>
Run Code Online (Sandbox Code Playgroud)

bum*_*mmi 5

CREATE TABLE #Temp (
    [@name] VARCHAR(200),
    [Value] VARCHAR(200)
)

INSERT INTO #Temp ([@name], [Value]) 
SELECT 'Fruit', 'Apple' UNION
SELECT 'Fruit', 'Orange' UNION
SELECT 'Fruit', 'Grape' UNION
SELECT 'Building', 'house'


Select  [@Name],
(
SELECT    
    [Value]
FROM #Temp t2
where t2.[@Name] = t1.[@Name]
FOR XML  PATH (''), TYPE
) FROM #Temp t1 GROUP by [@Name]
FOR XML PATH ('Produce'), ROOT('ProduceMaster'), TYPE
Run Code Online (Sandbox Code Playgroud)