【发布时间】:2017-09-19 06:40:29
【问题描述】:
我在一个表中有 2 列:column1,priority。
他们的数据如下所示。
+--------------------------+
|code | column1 | Priority |
+--------------------------+
| 1001| 1 | 1 |
| 1001| 2 | 1 |
| 1002| 1 | 2 |
| 1002| 2 | 2 |
| 1003| 1 | 3 |
| 1004| 2 | 4 |
| 1005| 1 | 5 |
| 1005| 2 | 5 |
| 1006| 1 | 5 |
| 1006| 2 | 5 |
| 1007| 1 | 5 |
| 1007| 2 | 5 |
+--------------------------+
如果我通过
连接这两列 select 'con' + column1 + Priority
from T1
我得到以下结果:
+---------------------------------------------+
|code | column1 | Priority | (No column name) |
+--------------------------+------------------+
| 1001| 1 | 1 | con11 |
| 1001| 2 | 1 | con21 |
| 1002| 1 | 2 | con12 |
| 1002| 2 | 2 | con22 |
| 1003| 1 | 3 | con13 |
| 1004| 2 | 4 | con24 |
| 1005| 1 | 5 | con15 |
| 1005| 2 | 5 | con25 |
| 1006| 1 | 5 | con15 |
| 1006| 2 | 5 | con25 |
| 1007| 1 | 5 | con15 |
| 1007| 2 | 5 | con25 |
+--------------------------+------------------+
但我要求的值如下: 就像如果连接的值已经存在,而不是在下一个优先级列值中增加,而不是将它与 column1 连接。例如:如果 15 已经存在,那么优先级值的增加使其 6 比连接并获得 25 到 26 的 16 相同。
+---------------------------------------------+
|code | column1 | Priority | (No column name) |
+--------------------------+------------------+
| 1001| 1 | 1 | con11 |
| 1001| 2 | 1 | con21 |
| 1002| 1 | 2 | con12 |
| 1002| 2 | 2 | con22 |
| 1003| 1 | 3 | con13 |
| 1004| 2 | 4 | con24 |
| 1005| 1 | 5 | con15 |
| 1005| 2 | 5 | con25 |
| 1006| 1 | 5 | con16 |
| 1006| 2 | 5 | con26 |
| 1007| 1 | 5 | con17 |
| 1007| 2 | 5 | con27 |
+--------------------------+------------------+
【问题讨论】:
-
这听起来像是一场维护噩梦,而且容易出错。您是否考虑过使用自动增量列?失败了,您是否考虑过在查询时简单地生成您想要的序列?
-
是sql server 2008还是2012? c# 与它有什么关系?
-
听起来像是糟糕的数据库设计
-
@ZoharPeled 2012
-
“已经存在”意味着一些排序,但我在表中看不到排序列。
标签: sql sql-server-2012 sql-server-2008-r2