【发布时间】:2018-04-12 21:08:31
【问题描述】:
给定以下表格,其中T_DATA.ID = PARENT_ID 或CHILD.ID
姓名:T_DATA
+----+------+--------+
| ID | CODE | VALUE |
+----+------+--------+
| 1 | 3186 | value1 |
| 2 | 3186 | value2 |
| 3 | 3189 | value3 |
| 4 | 3189 | value4 |
| 5 | 3190 | value5 |
+----+------+--------+
姓名:T_DATA_LINK
+-----------+----------+
| PARENT_ID | CHILD_ID |
+-----------+----------+
| 1 | 3 |
| 1 | 4 |
+-----------+----------+
我想返回一个这样的 xml 结构:
<ITEM_LIST>
<ITEM>
<CODE>3186</CODE>
<ROWS>
<ROW>
<ID>1</ID>
<ROW_INDEX>0</ROW_INDEX>
<VALUE>value1</VALUE>
</ROW>
<ROW>
<ID>2</ID>
<ROW_INDEX>1</ROW_INDEX>
<VALUE>value2</VALUE>
</ROW>
</ROWS>
</ITEM>
<ITEM>
<CODE>3189</CODE>
<ROWS>
<ROW>
<ID>3</ID>
<ROW_INDEX>0</ROW_INDEX>
<VALUE>value3</VALUE>
</ROW>
<ROW>
<ID>4</ID>
<ROW_INDEX>1</ROW_INDEX>
<VALUE>value4</VALUE>
</ROW>
</ROWS>
</ITEM>
<ITEM>
<CODE>3190</CODE>
<VALUE>value5</VALUE>
</ITEM>
</ITEM_LIST>
ROW_INDEX 每增加一个ROW,就加 1。
我需要T_DATA_LINK 表来了解ITEM 是否有父级。
如果它有一个父项,则意味着有多个记录具有该CODE 值,它们需要显示为ROWS,否则必须显示为单个ITEM。
更新
我实际上需要检查 T_DATA_LINK 表,因为可能存在 ITEM 有父项且只有一条记录的情况,但它仍需要显示为 ROW。
@Shnugo 我尝试了您的解决方案,但即使现在我在 ROWS 中获得了正确的值,对于具有多个记录的每个 ITEM,我都会得到重复项。
这可能是因为我必须将我需要返回的其他字段添加到 GROUP BY 中,而我没有添加到示例中以使其更简单。
例如,对于没有任何ROWS的项目,ID需要显示在ITEM级别。
更新 2
@Shnugo 你是对的。第 3 项和第 4 项是第 1 项的子项,但您在 xml 中看不到关系。
所有的物品都是独一无二的,永远都是。
在 T_DATA_LINK 中引用的项目仍然是唯一的,但在我的应用程序中相互链接,它们显示在表格中。 基本上 PARENT 是表的第一列,而子项是其他列。
这是我想要得到的更新后的输出。
对于具有行的项目,ID 应始终为 -1。
PARENT_CODE 应该是父项的 CODE(如果项目是父项则等于 CODE)
<ITEM_LIST>
<ITEM>
<ID>-1</ID>
<CODE>3186</CODE>
<PARENT_CODE>3186</PARENT_CODE>
<ROWS>
<ROW>
<ID>1</ID>
<ROW_INDEX>0</ROW_INDEX>
<VALUE>value1</VALUE>
</ROW>
<ROW>
<ID>2</ID>
<ROW_INDEX>1</ROW_INDEX>
<VALUE>value2</VALUE>
</ROW>
</ROWS>
</ITEM>
<ITEM>
<ID>-1</ID>
<CODE>3189</CODE>
<PARENT_CODE>3186</PARENT_CODE>
<ROWS>
<ROW>
<ID>3</ID>
<ROW_INDEX>0</ROW_INDEX>
<VALUE>value3</VALUE>
</ROW>
<ROW>
<ID>4</ID>
<ROW_INDEX>1</ROW_INDEX>
<VALUE>value4</VALUE>
</ROW>
</ROWS>
</ITEM>
<ITEM>
<ID>5</ID>
<CODE>3190</CODE>
<VALUE>value5</VALUE>
</ITEM>
</ITEM_LIST>
【问题讨论】:
-
我不认为 sql server 会以你想要的方式保存它。您可以使用像 c# 这样的编程语言来轻松读取和保存 xml。
-
@jdweng 为什么你认为 SQL-Server 不能解决这个问题?
-
这是一个非常好的问题!独立示例,明确的问题,预期的输出... +1 形成我的一面
标签: sql xml sql-server-2008 tsql xpath