【发布时间】:2019-03-21 04:51:14
【问题描述】:
有人知道是否有办法在 MS SQL Server / Transact SQL SELECT 语句中生成唯一的整数主键?
我遇到的问题是,我必须通过列组合(如复合主键)以编程方式合并 3 个数据表。组合不是实际的主键。
我的表格有点像这样:
Table 1: Base Table which is needed to be filled:
+----------+------+----------------+------------+----------+
|operatorid|opcode|bookkeeping_date|cash_amount |tip_amount|
+----------+------+----------------+------------+----------+
| 1 | 1 | 01.01.2018 |null |null |
+----------+------+----------------+------------+----------+
| 1 | 1 | 01.02.2018 |null |null |
+----------+------+----------------+------------+----------+
| 2 | 2 | 01.02.2018 |null |null |
+----------+------+----------------+------------+----------+
Table 2: Cash Data Table to be merged with base table
+----------+------+----------------+------------+
|operatorid|opcode|bookkeeping_date|cash_amount |
+----------+------+----------------+------------+
| 1 | 1 | 01.01.2018 |2.50 |
+----------+------+----------------+------------+
| 1 | 1 | 01.02.2018 |17.80 |
+----------+------+----------------+------------+
| 2 | 2 | 01.02.2018 |4.20 |
+----------+------+----------------+------------+
Table 3: Tip Data Table to be merged with base table:
+----------+------+----------------+----------+
|operatorid|opcode|bookkeeping_date|tip_amount|
+----------+------+----------------+----------+
| 1 | 1 | 01.01.2018 |3.50 |
+----------+------+----------------+----------+
| 1 | 1 | 01.02.2018 |4.20 |
+----------+------+----------------+----------+
| 2 | 2 | 01.02.2018 |0.00 |
+----------+------+----------------+----------+
如此简化的目标是通过合并数据表来填充“表 1:基表”。我们已经有了一个 c# 方法,可以在选择数据表后通过主键管理合并。
我现在的问题是我没有唯一的主键,而是“operatorid”和“bookkeeping_date”的组合。
有没有一种方法可以修改每个表的 SELECT 语句,以通过哈希或校验和或类似的东西获得唯一的整数?
编辑:现金金额和小费金额是表选择语句中使用聚合 SUM() 的总和。
最好的问候
百里香
【问题讨论】:
-
你看过ROW_NUMBER吗?
-
可以通过组合获得唯一的行ID,operatorid|opcode|bookkeeping_date
-
ROW_NUMBER 不是一个选项,因为由于 select 语句中的聚合函数必须对 select 语句进行分组。 ://
-
应该提到小费和现金金额已汇总。
-
想要的答案是什么。我认为这是不可能的,因为表格没有自然顺序。
标签: sql sql-server tsql merge composite-primary-key