KQL 查询仅连接具有列值的表
KQL query to only join tables with a column value
如果我的查询返回:
Id
Column1
Column2
123
Value
123
Value
456
Value
456
Value
我有第二个查询 returns:
Id
Column3
123
50
456
75
我如何通过 Id 加入两个查询,而不 Column3 值出现在存在 Id 的每一行 - 相反,对于存在它的每一行 AND 仅在 Column1 中有值。例如:
Id
Column1
Column2
Column3
123
Value
50
123
Value
456
Value
75
456
Value
您可以使用具有您描述的逻辑的 case()
函数计算 Column3
。
例如:
let q1 = datatable(Id:long, Column1:string, Column2:string)
[
123, 'Value', '',
123, '', 'Value',
456, 'Value', '',
456, '', 'Value',
]
;
let q2 = datatable(Id:long, Column3:long)
[
123, 50,
456, 75,
]
;
q1
| join kind=inner q2 on Id
| project Id, Column1, Column2, Column3 = case(isempty(Column1), long(null), Column3)
Id
Column1
Column2
Column3
123
Value
123
Value
50
456
Value
456
Value
75
如果我的查询返回:
Id | Column1 | Column2 |
---|---|---|
123 | Value | |
123 | Value | |
456 | Value | |
456 | Value |
我有第二个查询 returns:
Id | Column3 |
---|---|
123 | 50 |
456 | 75 |
我如何通过 Id 加入两个查询,而不 Column3 值出现在存在 Id 的每一行 - 相反,对于存在它的每一行 AND 仅在 Column1 中有值。例如:
Id | Column1 | Column2 | Column3 |
---|---|---|---|
123 | Value | 50 | |
123 | Value | ||
456 | Value | 75 | |
456 | Value |
您可以使用具有您描述的逻辑的 case()
函数计算 Column3
。
例如:
let q1 = datatable(Id:long, Column1:string, Column2:string)
[
123, 'Value', '',
123, '', 'Value',
456, 'Value', '',
456, '', 'Value',
]
;
let q2 = datatable(Id:long, Column3:long)
[
123, 50,
456, 75,
]
;
q1
| join kind=inner q2 on Id
| project Id, Column1, Column2, Column3 = case(isempty(Column1), long(null), Column3)
Id | Column1 | Column2 | Column3 |
---|---|---|---|
123 | Value | ||
123 | Value | 50 | |
456 | Value | ||
456 | Value | 75 |