Sql 基于合并表编号获取新坐标

Sql 基于合并表编号获取新坐标,sql,sql-server,Sql,Sql Server,有两张桌子。一个是包含访客中心“表信息”的基表。另一个包含“职业信息” 基表结构具有为每个表记录的原始坐标(x,y)。然而,在职业期间,一两个表可以与另一个表合并。在这种情况下,我希望得到具有新坐标的不同表列表。无法更改或更新基表坐标 不知怎的,我只是没有得到结果。您可能会注意到表7和表9合并了。7合并为9。因此,9是主表,表7和表9的坐标必须为9 TABLE_NUMBER T_TABLE TABLE_TYPE LOCATION_X LOCATION_Y 1

有两张桌子。一个是包含访客中心“表信息”的基表。另一个包含“职业信息”

基表结构具有为每个表记录的原始坐标(x,y)。然而,在职业期间,一两个表可以与另一个表合并。在这种情况下,我希望得到具有新坐标的不同表列表。无法更改或更新基表坐标

不知怎的,我只是没有得到结果。您可能会注意到表7和表9合并了。7合并为9。因此,9是主表,表7和表9的坐标必须为9

TABLE_NUMBER    T_TABLE     TABLE_TYPE  LOCATION_X  LOCATION_Y
1                (null)     Rectangular     49      74
2                (null)     Rectangular     68      101
3                3          Rectangular     49      107
4                4          Rectangular     24      80
5                (null)     Rectangular     82      80
6                6          Round           29      19
7                (null)     Round           13      9
8                8          Round           66      10
9                9          Round           112     16
9                7          Round           112     16

预期成果:

TABLE_NUMBER    TABLE_TYPE    LOCATION_X    LOCATION_Y
 1               Rectangular    49           74
 2               Rectangular    68           101
 3               Rectangular    49           107
 4               Rectangular    24           80
 5               Rectangular    82           80
 6               Round          29           19
 7               Round          112          16
 8               Round          66           10
 9               Round          112          16
这是我的建议。希望这能奏效

脚本:

;WITH cte_temp AS
(
  SELECT TT.TABLE_NUMBER
      ,TC.TABLE_NUMBER T_TABLE
      ,TT.[TABLE_TYPE]
      ,TT.[LOCATION_X]
      ,TT.[LOCATION_Y]      
  FROM [TABLES] TT LEFT JOIN [OCCUPATIONS] TC
  ON (TT.[TABLE_NUMBER] = CASE WHEN TC.[MAIN_TABLE_NUMBER] = 0 THEN TC.TABLE_NUMBER
  ELSE TC.MAIN_TABLE_NUMBER END)
)

SELECT DISTINCT 
      a.TABLE_NUMBER,
      a.TABLE_TYPE,
      CASE WHEN a.T_TABLE IS NULL AND b.T_TABLE IS NOT NULL THEN b.LOCATION_X ELSE a.LOCATION_X END AS LOCATION_X,
      CASE WHEN a.T_TABLE IS NULL AND b.T_TABLE IS NOT NULL THEN b.LOCATION_Y ELSE a.LOCATION_Y END AS LOCATION_Y
FROM cte_temp AS a
LEFT OUTER JOIN cte_temp AS b
    ON a.TABLE_NUMBER = b.T_TABLE

那么,到目前为止您尝试了什么,您应该得到什么结果(您不应该仅仅依靠SQLFIDLE来存储这些信息)?(作为旁注,我最初认为
TABLE
指的是一个db表,并认为这需要一些强大的动态sql。#呼#。我看到人们尝试过的东西…)@Clockwork Muse
到目前为止您尝试了什么,应该得到什么结果(您不应该仅仅依靠sql Fiddle来存储这些信息)?
你和我都这样做了一段时间,我通常会确保我提出的问题至少达到最低标准。如果你读了这个问题,你会注意到我预期的结果。不完全依赖SQL FIDLE是什么意思?在您的概念中,必须创建一个临时表。虽然我很感激你的努力,但我希望我们能只用原始表格得到结果。你觉得怎么样?@bonCodigo,我已经按照你的建议修改了查询。请让我知道它是否有效。我不是故意苛刻的。但我看不出您使用
CTE
得到的结果与我的原始结果有多大区别。此外,表号
9
重复。。。你有什么建议?我需要我的代码的高度可移植性-所以有一个CTE,不应该有第二个想法要考虑吗?很好,我看到你已经修改了你的问题,所以我的结果是基于我对昨天发布的理解。在我插手并修改我的查询之前,我应该再次检查这个问题,这是我的责任。让我把你的问题通读一遍,看看我能帮上什么忙。:)出于礼貌,我接受了你的回答,并感谢你的努力。不过,如果可能的话,我希望能提出一个简单的问题你似乎很兴奋能在第一阶段回答这个问题——坚持下去。