簡體   English   中英

Oracle PL / SQL:不同的列而不是行

[英]Oracle PL/SQL: Distinct Columns instead of rows

我需要使用一個看起來像這樣的表:

Date     |   Number1    |    Number2    | Number 3
---------------------------------------------------------
 29.11.2016 |      7       |       7       |     5
---------------------------------------------------------
 30.11.2016 |      5       |       6       |     7

我需要定義一個函數來遍歷表並返回一個布爾值。 TRUE ,如果在數字1,數字,3號,沒有重復的值FALSE ,如果有重復的值。 問題是,可能還存在數字4或數字5,可以有無限制的列,並且該功能應該能夠處理該問題。

什么是這樣做的有效方法? 提前致謝!

您的數據結構不佳。 使用列中的值會容易得多,因此讓我們取消數據透視表的操作並以這種方式進行查詢。 以下假設date是不同的:

with t as (
      select date, number1 as num from t union all
      select date, number2 from t union all
      select date, number3 from t
     )
select date,
       (case when count(*) = count(distinct num) then 'true' else 'false' end) as flag
from t
where num is null
group by date;

作為一個選擇,這變得很復雜:

select t.*,
       (case when number1 in (number2, number3) then 'false'
             when number2 in (number3) then 'false'
             else 'true'
        end) as flag
from t;

好的,還不錯。 這很容易擴展到多列:

select t.*,
       (case when number1 in (number2, number3, number4, number5) then 'false'
             when number2 in (number3, number4, number5) then 'false'
             when number3 in (number4, number5) then 'false'
             when number4 in (number5) then 'false'
             else 'true'
        end) as flag
from t;

我認為可以通過檢查最高值和最低值是否相同來解決此問題,方法是:

select
  t.*,
  case
    when Greatest(number1, number2, number3) =
            Least(number1, number2, number3)
    then 1
    else 0
    end as no_duplicates
from t;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM