我在公司里使用几张桌子,但我不是它们的所有者。我无法编辑数据,因此不可能进行更新。我想加入表,然后根据某些参数获取计数。但是,为了连接表,我需要修改一个表中的一列,以便这可以成为表之间的链接列。
基本上表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 显示计数。
见下表:
这是我尝试过的:
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
您可以像下面一样使用 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 这里