SQL:构建多部分 SQL 查询(替换、联接、获取计数)

问题描述 投票:0回答:1

我在公司里使用几张桌子,但我不是它们的所有者。我无法编辑数据,因此不可能进行更新。我想加入表,然后根据某些参数获取计数。但是,为了连接表,我需要修改一个表中的一列,以便这可以成为表之间的链接列。

基本上表1具有以下格式的相关列:“AA:BB:CC:DD”,表2具有以下格式的数据:“AABBCCD”。所以我无法使用这两列加入它们。所以,首先我想做这样的事情:

SELECT column1, REPLACE(column1, ":", "")
FROM table1

然后,在同一个查询中,我想使用 Replaced 列在表 1 和表 2 之间进行联接以链接它们。然后我想过滤该连接表以根据某些参数获取各种行的计数。是否可以在 SQL 中执行这样的多步查询?请参阅附图,了解我正在使用的表格的模型。这也是我想做的:

1.) 将 Table1 的 MacID 列中的冒号替换为空格(以删除冒号)

2.) 连接表 1 和表 2。我想保留表 2 的所有内容。然后我想将与 MacID 关联的meter_form 和meter_class 链接到表2,并向表2 添加两个新列,即meter_form 和meter_class。结果是,对于 Table2 中显示的每一行,关联的meter_form 和meter_class 将链接到新列中的该MacID。 MacID 将在表 2 中出现数千次。但关联的meter_form 和meter_class 将始终相同。

3.) 然后我想计算当前列值超过关联的meter_class 值的行数。我想按 MacID 显示计数。

见下表:

enter image description here enter image description here

这是我尝试过的:


SELECT table1.meter_class, table1.meter_form, table2.MacID

FROM (
SELECT MacID, REPLACE(MacID, ":", "") as newmac
FROM table1)


RIGHT JOIN table1
ON table1.newmac = table2.MacID

希望您可以执行如上所述的多步查询,但这不起作用。 返回以下错误:

Error while compiling statement: FAILED: ParseException line 9:0 cannot recognize input near 'RIGHT' 'JOIN' 'coc1_ami' in subquery source

这就是我如何进行计数。不知道如何链接以上部分。:

SELECT count(MacID), MacID
FROM table2 
where current > meter_class
group by MacID,
having count(*) > 10
sql join replace
1个回答
0
投票

您可以像下面一样使用 CTE ,

Select A.MacID INTO #Table1 From 
(Select 'A:B:C' MacID Union all
Select 'X:Y:Z' MacID) A

Select * 
  Into #Table2 from
  (
  Select 12 'Current', 'ABC' MacID, 200 'Class' Union
  Select 50 'Current', 'XYZ' MacID, 320 'Class' Union
  Select 220 'Current', 'ABC' MacID, 200 'Class'   
  ) B
  
  ;With newTable1 as 
(Select MacID, REPLACE(MacID,':','') newMac from #Table1)

Select T2.MacID, Count(T2.MacID) TotalCount 
    from newTable1 T1 
    Right Join #Table2 T2 on T1.newMac = T2.MacID
    Where T2.[Current] > T2.Class
Group By T2.MacID 

FiddleQuery 这里

© www.soinside.com 2019 - 2024. All rights reserved.