我在同一张表中有两个事务,我想比较这两个事务,如果有任何不匹配,它将提供不匹配数据。
|Col1|Col2|Col3|Col4|
Trans-1 |ABC |123 |321 |111 |
---------------------------------------------------
Trans-2 |ABC |333 |321 |123|
输出:-
|col2|col4|
Trans-1 |123 |111 |
---------------------------------------------------
Trans-2 |333 |123 |
#
现在,我可以使用以下命令来获取列值和其他值。但是结果显示为一行,如下所示,每次交易后有没有办法中断该行?
实际:-
Col1| MAX(Col1) |MIN(Col1) |Col2 |MAX(Col2)| MIN(Col2)|
---------------------------------------------------------
same|ABC |ABC |diff |123 |321 |
预期:
Col1| MAX(Col1) |MIN(Col1) |
---------------------------
same|ABC |ABC |
|Col2 |MAX(Col2)| MIN(Col2)|
----------------------------
|diff |123 |321 |
团队我们在这里犯了大错?猜猜我们是否只有一行,在这种情况下,所有行都将相同,如果只有一个事务,如何实现则应该失败,而不是比较同一事务。
答案 0 :(得分:1)
您可以尝试通过Col1
进行汇总,然后显示所有共享col1
值且其他列不一致的记录:
SELECT
Col1,
CASE WHEN COUNT(DISTINCT Col2) > 1 THEN 'Col2' END AS Col2_diff,
CASE WHEN COUNT(DISTINCT Col3) > 1 THEN 'Col3' END AS Col3_diff,
CASE WHEN COUNT(DISTINCT Col4) > 1 THEN 'Col4' END AS Col4_diff
FROM yourTable
GROUP BY Col1
HAVING
COUNT(DISTINCT Col2) > 1 OR
COUNT(DISTINCT Col3) > 1 OR
COUNT(DISTINCT Col4) > 1;
答案 1 :(得分:0)
您可以将列标记为相同或不同:
select (case when max(col1) = min(col1) and count(col1) = count(*) or
max(col1) is null then 'same' else 'diff'
end) as col1,
(case when max(col2) = min(col2) and count(col2) = count(*) or
max(col2) is null then 'same' else 'diff'
end) as col2,
(case when max(col3) = min(col3) and count(col3) = count(*) or
max(col3) is null then 'same' else 'diff'
end) as col3,
(case when max(col4) = min(col4) and count(col3) = count(*) or
max(col4) is null then 'same' else 'diff'
end) as col4
from t;
请注意,这将返回数据中相同的列。除非您使用动态SQL(PL / SQL中的execute immediate
),否则SQL查询会返回一组固定的列。
答案 2 :(得分:0)
比较值并将add_column :products, :parent_id, :integer, null: true, index: true
add_foreign_key :products, :products, column: :parent_id
视为常规值(即null
= null
为TRUE)的一种可能技巧是使用null
DECODE
如果值相等则返回1,如果值不同则返回0。
这里有一个示例,返回带有差异的列名
DECODE(value1,value2,1,0)
对于宽表,您可以直接从数据字典中预先生成查询的一部分
这里有个例子:
select
case when decode(max(col1),min(col1),1,0) = 0 then 'col1 ' end ||
case when decode(max(col2),min(col2),1,0) = 0 then 'col2 ' end ||
case when decode(max(col3),min(col3),1,0) = 0 then 'col3 ' end ||
case when decode(max(col4),min(col4),1,0) = 0 then 'col4 ' end as diff_col_names
from trans
简单地将结果复制并粘贴到查询中。您必须从最后一行删除串联,然后将其替换为列名。
答案 3 :(得分:0)
问题已解决:-
select 'ABC' as COLUMN_NAME,
(case when to_char(count(ABC)) >1 and to_char (max(ABC)) = to_char(min(ABC)) and to_char(count(ABC)) = count(*)
and to_char(max(ABC)) is null then 'same' else 'Diff'end)as COMPARISION_VALUE,
(case when to_char(count(ABC))=1 or to_char(min(ABC)) is null then 'No Values' else to_char(max(ABC)) end ) as TRANSACTION1,
to_char(min(ABC))as TRANSACTION2
from AAA where MID ='ASD';