I have a SQL View with the data of:
+-----------+-------------+--------------+--------------------+------------------+-----------+----------------+--------------+-------------+----------+
| CarparkNo | CarparkAbbr | CarparkDesig | CountingCategoryNo | CountingCategory | FreeLimit | OccupancyLimit | CurrentLevel | Reservation | Capacity |
+-----------+-------------+--------------+--------------------+------------------+-----------+----------------+--------------+-------------+----------+
| 0 | L72 | Lot 72 | 1 | Short-Term | 174 | 175 | 87 | 0 | 175 |
| 0 | L72 | Lot 72 | 2 | Contract | 0 | 0 | 0 | 0 | 0 |
| 0 | L72 | Lot 72 | 3 | Total | 174 | 175 | 87 | 0 | 175 |
+-----------+-------------+--------------+--------------------+------------------+-----------+----------------+--------------+-------------+----------+
I need to make a XML file that looks like
<Carparks>
<Carpark>
<CarparkNo>0</CarparkNo>
<CarparkAbbr>L72</CarparkAbbr>
<CarparkDesig>Lot 72</CarparkDesig>
<CountingCategory>
<CountingCategoryNo>1</CountingCategoryNo>
<CountingCategory>Short-Term</CountingCategory>
<FreeLimit>174</FreeLimit>
<OccupancyLimit>175</OccupancyLimit>
<CurrentLevel>64</CurrentLevel>
<Reservation>0</Reservation>
<Capacity>175</Capacity>
</CountingCategory>
<CountingCategory>
<CountingCategoryNo>2</CountingCategoryNo>
<CountingCategory>Contract</CountingCategory>
<FreeLimit>0</FreeLimit>
<OccupancyLimit>0</OccupancyLimit>
<CurrentLevel>0</CurrentLevel>
<Reservation>0</Reservation>
<Capacity>0</Capacity>
</CountingCategory>
<CountingCategory>
<CountingCategoryNo>3</CountingCategoryNo>
<CountingCategory>Total</CountingCategory>
<FreeLimit>174</FreeLimit>
<OccupancyLimit>175</OccupancyLimit>
<CurrentLevel>64</CurrentLevel>
<Reservation>0</Reservation>
<Capacity>175</Capacity>
</CountingCategory>
</Carpark>
</Carparks>
So far, I have a statement of:
SELECT [CarparkNo]
,[CarparkAbbr]
,[CarparkDesig]
,(SELECT [CountingCategoryNo]
,[CountingCategory]
,[FreeLimit]
,[OccupancyLimit]
,[CurrentLevel]
,[Reservation]
,[Capacity]
FOR XML PATH('CountingCategory'), TYPE)
FROM [PARK_DB].[dbo].[CPCounting]
FOR XML PATH('Carpark'), ROOT('Carparks'), TYPE;
Which sort of works, but makes duplicate <Carpark>
tags instead of keeping it in one grouping:
<Carparks>
<Carpark>
<CarparkNo>0</CarparkNo>
<CarparkAbbr>L72</CarparkAbbr>
<CarparkDesig>Lot 72</CarparkDesig>
<CountingCategory>
<CountingCategoryNo>1</CountingCategoryNo>
<CountingCategory>Short-Term</CountingCategory>
<FreeLimit>174</FreeLimit>
<OccupancyLimit>175</OccupancyLimit>
<CurrentLevel>82</CurrentLevel>
<Reservation>0</Reservation>
<Capacity>175</Capacity>
</CountingCategory>
</Carpark>
<Carpark>
<CarparkNo>0</CarparkNo>
<CarparkAbbr>L72</CarparkAbbr>
<CarparkDesig>Lot 72</CarparkDesig>
<CountingCategory>
<CountingCategoryNo>2</CountingCategoryNo>
<CountingCategory>Contract</CountingCategory>
<FreeLimit>0</FreeLimit>
<OccupancyLimit>0</OccupancyLimit>
<CurrentLevel>0</CurrentLevel>
<Reservation>0</Reservation>
<Capacity>0</Capacity>
</CountingCategory>
</Carpark>
<Carpark>
<CarparkNo>0</CarparkNo>
<CarparkAbbr>L72</CarparkAbbr>
<CarparkDesig>Lot 72</CarparkDesig>
<CountingCategory>
<CountingCategoryNo>3</CountingCategoryNo>
<CountingCategory>Total</CountingCategory>
<FreeLimit>174</FreeLimit>
<OccupancyLimit>175</OccupancyLimit>
<CurrentLevel>82</CurrentLevel>
<Reservation>0</Reservation>
<Capacity>175</Capacity>
</CountingCategory>
</Carpark>
</Carparks>
How do I go about formatting this to the required spec? The account the command is run under only has read access to the views that the system provides.