여러 열에서 최소값을 선택하는 가장 좋은 방법은 무엇입니까?


82

SQL Server 2005에서 다음 표가 제공됩니다.

ID   Col1   Col2   Col3
--   ----   ----   ----
1       3     34     76  
2      32    976     24
3       7    235      3
4     245      1    792

다음 결과를 생성하는 쿼리를 작성하는 가장 좋은 방법은 무엇입니까 (즉, 각 행에 대해 Col1, Col2 및 Col 3 중 최소값을 포함하는 열인 최종 열을 생성하는 )?

ID   Col1   Col2   Col3  TheMin
--   ----   ----   ----  ------
1       3     34     76       3
2      32    976     24      24
3       7    235      3       3
4     245      1    792       1

최신 정보:

설명을 위해 실제 시나리오에서 (코멘트에서 말했듯이) 데이터베이스가 올바르게 정규화되었습니다 . 이러한 "배열"열은 실제 테이블이 아니라 보고서에 필요한 결과 집합에 있습니다. 새로운 요구 사항은 보고서에도이 MinValue 열이 필요하다는 것입니다. 기본 결과 집합을 변경할 수 없으므로 편리한 "탈옥 카드"를 위해 T-SQL을 찾고있었습니다.

아래에 언급 된 CASE 접근 방식을 시도해 보았지만 약간 번거롭지 만 작동합니다. 동일한 행에 두 개의 최소값이 있다는 사실을 수용해야하기 때문에 답변에 명시된 것보다 더 복잡합니다.

어쨌든, 내 제약 조건을 감안할 때 꽤 잘 작동하는 현재 솔루션을 게시 할 것이라고 생각했습니다. UNPIVOT 연산자를 사용합니다.

with cte (ID, Col1, Col2, Col3)
as
(
    select ID, Col1, Col2, Col3
    from TestTable
)
select cte.ID, Col1, Col2, Col3, TheMin from cte
join
(
    select
        ID, min(Amount) as TheMin
    from 
        cte 
        UNPIVOT (Amount for AmountCol in (Col1, Col2, Col3)) as unpvt
    group by ID
) as minValues
on cte.ID = minValues.ID

나는 이것이 최고의 성능을 제공 할 것이라고 기대하지는 않지만 상황을 감안할 때 (새로운 MinValue 열 요구 사항에 대해서만 모든 쿼리를 재 설계 할 수는 없음) 매우 우아한 "탈옥 카드".


11
IMHO 저자의 UNPIVOT 솔루션은 다른 답변보다 우수합니다.
Joe Harris

2
이해를 시작하는 데 시간이 좀 걸리더라도 Nizam의 솔루션이 가장 린 솔루션이라고 생각합니다. 가늘고 매우 유용합니다.
Patrick Honorez 2015 년

답변:


59

이를 수행하는 방법은 여러 가지가 있습니다. 내 제안은 케이스 / 언제 사용하는 것입니다. 3 개의 열로 나쁘지 않습니다.

Select Id,
       Case When Col1 < Col2 And Col1 < Col3 Then Col1
            When Col2 < Col1 And Col2 < Col3 Then Col2 
            Else Col3
            End As TheMin
From   YourTableNameHere

6
이것이 나의 초기 생각이었습니다. 그러나 실제 쿼리에는 5 개의 열이 필요하며 열 수는 늘어날 수 있습니다. 따라서 CASE 접근 방식은 약간 다루기 어려워집니다. 하지만 작동합니다.
stucampbell

2
열 수가 증가 할 수 있다면 분명히 잘못하고있는 것입니다. 내 게시물을 참조하십시오 (왜 DB 스키마를 이런 방식으로 설정하지 말아야하는지에 대한 폭언).
paxdiablo

2
감사. 다른 의견에서 언급했듯이. 실제 테이블을 쿼리하지 않습니다. 테이블이 올바르게 정규화되었습니다. 이 쿼리는 특히 복잡한 쿼리의 일부이며 파생 테이블의 중간 결과에 대해 작업합니다.
stucampbell

2
이 경우 정규화 된 것처럼 보이도록 다르게 유도 할 수 있습니까?
Kev

3
@Gmastros의 답변에 대한 추가 기능은 Cols 중 일부에 일치하는 데이터가있어서 = 기호를 추가해야한다는 문제가 발생했습니다. 내 데이터도 null 가능성이 있으므로이를 설명하기 위해 or 문을 추가해야했습니다. 이 작업을 수행하는 더 쉬운 방법이있을 수 있지만 지난 6 개월 동안 내가 찾고있는 방법을 찾지 못했습니다. 여기에 참여한 모든 사람에게 감사합니다. Select Id, CaseWhen (Col1 <= Col2 OR Col2 is null) And (Col1 <= Col3 OR Col3 is null) Then Col1 When (Col2 <= Col1 OR Col1 is null) And (Col2 <= Col3 OR Col3 is null) Then Col2 Else Col3 End As TheMin From YourTableNameHere
Chad Portman

55

사용 CROSS APPLY:

SELECT ID, Col1, Col2, Col3, MinValue
FROM YourTable
CROSS APPLY (SELECT MIN(d) AS MinValue FROM (VALUES (Col1), (Col2), (Col3)) AS a(d)) A

SQL 바이올린


흥미롭게 보이지만이 작업을 수행 할 수 없습니다. 당신은 아마도 약간 명시 적으로 할 수 있습니까? thx
Patrick Honorez 2015 년

2
@iDevlop 나는 내 대답에 SQL 바이올린을 삽입했습니다
Nizam

내가 몰랐던 것은 스칼라 함수였습니다. 귀하의 답변은 cross apply. 가치 / 성능을 추가합니까? stackoverflow.com/a/14712024/78522
Patrick Honorez 2015 년

@iDevlop 성능을 제공하지 않으면 가독성이 높아집니다. 예를 들어, 내가 좋아하는 뭔가를 사용할 수 있습니다 where MinValue > 10내가 없이는 할 수CROSS APPLY
니잠

2
실제로 나는 그 동안 그것의 "재사용 성"이점을 이해할 기회가 있었다. 감사. 나는 오늘 두 가지를 배웠다 ;-)
Patrick Honorez

31
SELECT ID, Col1, Col2, Col3, 
    (SELECT MIN(Col) FROM (VALUES (Col1), (Col2), (Col3)) AS X(Col)) AS TheMin
FROM Table

1
잡아 주셔서 감사합니다. 그 태그를 놓쳤습니다. 나는 실제로 모르고 그것을 테스트 할 능력도 없다. 앞으로 태그 확인에 더욱 성실 할 것입니다.
dsz

3
더 우아한 솔루션을 손에 넣으십시오. 왜 더 많은 찬성표가 없는지 확실하지 않습니다.
jwolf

인라인 최대 / 최소 계산의 경우이 작업을 수행하는 가장 좋은 방법입니다
Saxman

멋진 솔루션.
Phani

16

MySQL에서는 다음을 사용하십시오.

select least(col1, col2, col3) FROM yourtable

SQL 문이 아닐 수 있습니다.
Tino Jose Thannippara 2011

4
그러나 어떤 경우에는 그렇습니다. 사람들을 위해,이 멋진 대답
커비

1
8.1 이후 Postgres에서 사용 가능 : postgresql.org/docs/8.1/functions-conditional.html#AEN12704
swrobel

1
이 비표준 SQL 확장은 Microsoft SQL 서버를 제외한 거의 모든 데이터베이스에서 지원됩니다.
Mikko Rantalainen

LEAST12 일 전의 최신 버전의 Microsoft SQL Server Managed Instances에서 작동합니다. reddit.com/r/SQLServer/comments/k0dj2r/…
John Zabroski

10

비틀어 "무력한 힘"접근 방식을 사용할 수 있습니다.

SELECT CASE
    WHEN Col1 <= Col2 AND Col1 <= Col3 THEN Col1
    WHEN                  Col2 <= Col3 THEN Col2
    ELSE                                    Col3
END AS [Min Value] FROM [Your Table]

첫 번째 when 조건이 실패하면 Col1이 가장 작은 값이 아니라는 것을 보장하므로 나머지 조건에서 제거 할 수 있습니다. 후속 조건에서도 마찬가지입니다. 5 개의 열에 대한 쿼리는 다음과 같습니다.

SELECT CASE
    WHEN Col1 <= Col2 AND Col1 <= Col3 AND Col1 <= Col4 AND Col1 <= Col5 THEN Col1
    WHEN                  Col2 <= Col3 AND Col2 <= Col4 AND Col2 <= Col5 THEN Col2
    WHEN                                   Col3 <= Col4 AND Col3 <= Col5 THEN Col3
    WHEN                                                    Col4 <= Col5 THEN Col4
    ELSE                                                                      Col5
END AS [Min Value] FROM [Your Table]

두 개 이상의 열 사이에 동점이있는 경우 가능한 한 빨리 문을 <=종료 CASE합니다.


2
<=대신 사용하십시오 . 그렇지 않으면 첫 번째 대신 마지막으로 일치하는 최소값이 사용됩니다.
chezy525

6

예에서와 같이 열이 정수이면 함수를 만듭니다.

create function f_min_int(@a as int, @b as int) 
returns int
as
begin
    return case when @a < @b then @a else coalesce(@b,@a) end
end

그런 다음 그것을 사용해야 할 때 나는 할 것입니다.

select col1, col2, col3, dbo.f_min_int(dbo.f_min_int(col1,col2),col3)

열이 5 개인 경우 위의 내용은

select col1, col2, col3, col4, col5,
dbo.f_min_int(dbo.f_min_int(dbo.f_min_int(dbo.f_min_int(col1,col2),col3),col4),col5)

4
MSSQL에서 스칼라 함수의 엄청나게 나쁜 성능을 감안할 때 나는이 접근 방식에 대해 조언 할 의무가 있다고 느낍니다. 이 길을 가고 싶다면 적어도 한 번에 5 개의 열을 모두 매개 변수로 사용하는 함수를 작성하십시오. 아직 나쁜 것,하지만 적어도 조금 덜 나쁜 = /이야
deroby

재귀는 성능을 저하시킵니다. 그러나 요구 사항을 충족합니다.
Tino Jose Thannippara 2011

6

그렇게 할 수있는 가장 좋은 방법은 아마도 되지 는 사람들이 그냥하면 원하는 결과를 달성하기 훨씬 쉬운 방법이있는 의미있는 정보를 추출하는 SQL "체조"를 요구하는 방법으로, 자신의 데이터를 저장 주장하는 것이 이상하다 - 그것을 할 스키마를 좀 더 잘 구성하십시오 :-)

이 작업을 수행 하는 올바른 방법은 다음 표를 만드는 것입니다.

ID    Col    Val
--    ---    ---
 1      1      3
 1      2     34
 1      3     76

 2      1     32
 2      2    976
 2      3     24

 3      1      7
 3      2    235
 3      3      3

 4      1    245
 4      2      1
 4      3    792

ID/Col기본 키로 (그리고 아마도 Col여분의 키로서, 사용자의 요구에 따라). 그러면 쿼리가 단순 select min(val) from tbl해지며 where col = 2다른 쿼리에서 사용하여 개별 '이전 열'을 개별적으로 처리 할 수 ​​있습니다 . 또한 '이전 열'수가 증가 할 경우 쉽게 확장 할 수 있습니다.

이렇게하면 쿼리 훨씬 쉬워집니다. 당신이 만약 내가 사용하는 경향이 일반적인 가이드 라인이며, 지금까지 데이터베이스 행의 배열처럼 보이는, 당신은 아마 뭔가 잘못하고 있다는 것을 뭔가를하고 데이터를 구조 조정에 대해 생각해야한다.


그러나 어떤 이유로 해당 열을 변경할 수없는 경우 삽입 및 업데이트 트리거 를 사용하고이 트리거가 최소값으로 설정된 다른 열을 추가하는 것이 좋습니다 Col1/2/3. 이것은 작업의 '비용'을 선택에서 그것이 속한 업데이트 / 삽입으로 이동시킬 것입니다. 내 경험상 대부분의 데이터베이스 테이블은 쓰여진 것보다 훨씬 더 자주 읽혀 지므로 쓰기 비용이 시간이 지남에 따라 더 효율적이되는 경향이 있습니다.

다른 열 중 하나가 변경 될 때 즉, 행의 최소에만 때문에, 변화 의가 있다고 하면, (데이터가 변경되지 않은 경우 낭비)를 선택 할 때마다 그것을하지 계산해야 할 때. 그러면 다음과 같은 테이블이 생성됩니다.

ID   Col1   Col2   Col3   MinVal
--   ----   ----   ----   ------
 1      3     34     76        3
 2     32    976     24       24
 3      7    235      3        3
 4    245      1    792        1

select시간에 결정을 내려야하는 다른 옵션 은 일반적으로 데이터가 삽입 / 업데이트 할 때만 변경되므로 성능 측면에서 좋지 않습니다. 다른 열을 추가하면 DB에서 더 많은 공간을 차지하고 삽입 및 업데이트하지만 선택에 대해 훨씬 더 빠를 수 있습니다 . 선호하는 접근 방식은 우선 순위에 따라 달라야하지만 언급했듯이 대부분의 테이블은 작성된 것보다 훨씬 더 자주 읽습니다 .


18
음. diatribe에 감사드립니다. 실제 데이터베이스가 제대로 정규화되었습니다. 이것은 간단한 예입니다. 실제 쿼리는 복잡하고 내가 관심있는 5 개의 열은 파생 테이블의 중간 결과입니다.
stucampbell

3
안타깝게도이 부족은 여전히 ​​서 있습니다. 제안한 형식의 중간 테이블을 만드는 것은 이와 같은 영구 테이블을 만드는 것만큼이나 문제가 있습니다. 이것은 내가 원하는 결과를 얻기 위해 SQL 체조라고 부르는 것을 수행해야한다는 사실에 의해 입증됩니다.
paxdiablo

한 줄에 '배열'이 필요한 진정한 이유가 있다면 우리를 깨달아 주시기 바랍니다. 그러나 최소값을 선택하는 데 사용하는 것은 그중 하나가 아닙니다.
paxdiablo

2
원래 (결함이있는 경우) 테이블 구조를 보존하기위한 트리거 제안에 +1.
Scott Ferguson

1
자체 조인 된 계층 구조 테이블을 다루는 경우 어떻게됩니까?
Nathan Tregillus 2010

5

통합 쿼리를 사용하여이 작업을 수행 할 수도 있습니다. 열 수가 증가하면 쿼리를 수정해야하지만 최소한 간단하게 수정해야합니다.

Select T.Id, T.Col1, T.Col2, T.Col3, A.TheMin
From   YourTable T
       Inner Join (
         Select A.Id, Min(A.Col1) As TheMin
         From   (
                Select Id, Col1
                From   YourTable

                Union All

                Select Id, Col2
                From   YourTable

                Union All

                Select Id, Col3
                From   YourTable
                ) As A
         Group By A.Id
       ) As A
       On T.Id = A.Id

2
이것은 작동하지만 행 수가 증가하면 성능이 저하됩니다.
Tomalak

1
감사. 네, 작동합니다. Tomalak이 말했듯이, 내 실제 쿼리에서 이것은 성능에 대해 매우 불쾌 할 것입니다. 하지만 노력은 +1. :)
stucampbell

4

이것은 무차별 대입이지만 작동합니다.

 select case when col1 <= col2 and col1 <= col3 then col1
           case when col2 <= col1 and col2 <= col3 then col2
           case when col3 <= col1 and col3 <= col2 then col3
    as 'TheMin'
           end

from Table T

... min ()은 열이 아닌 한 열에서만 작동하기 때문입니다.


또한 MIN이 암시 적 중첩 루프 조인을 생성하기 때문에 가장 빠른 경향이 있습니다.
John Zabroski

2

모두 이 질문에 그리고 이 질문은 이 대답을하려고합니다.

요약하면 Oracle에는이를위한 내장 기능이 있다는 것입니다. Sql Server에서는 사용자 정의 함수를 정의하거나 case 문을 사용하는 데 어려움을 겪고 있습니다.


2

여러 열의 경우 CASE 문을 사용하는 것이 가장 좋지만 두 개의 숫자 열 i 및 j의 경우 간단한 수학을 사용할 수 있습니다.

min (i, j) = (i + j) / 2-abs (ij) / 2

이 공식은 여러 열의 최소값을 얻는 데 사용할 수 있지만 2를 지나면 정말 지저분합니다. min (i, j, k)는 min (i, min (j, k))입니다.


1

저장 프로 시저를 만들 수 있다면 값의 배열을 취할 수 있으며이를 호출 할 수 있습니다.


Oracle에는 원하는 것을 정확히 수행하는 LEAST ()라는 함수가 있습니다.
Kev

문질러 주셔서 감사합니다 :) SQL Server에 동등한 기능이 없다는 것을 믿을 수 없습니다!
stucampbell

"이봐, 내가 가장 좋아하는 pgsql도 가지고 있지 않다"고 말하려고했지만 실제로는 그렇습니다. ;) 함수 자체는 작성하기 어렵지 않습니다.
Kev

아, T-SQL이 배열을 지원하지 않는다는 점만 빼면 (???) 음, 5 개 매개 변수 함수를 가질 수 있고 더 필요하면 확장 만하면됩니다.
Kev

1
select *,
case when column1 < columnl2 And column1 < column3 then column1
when columnl2 < column1 And columnl2 < column3 then columnl2
else column3
end As minValue
from   tbl_example

1
이것은 G Mastros의 대답과 중복되므로 궁금한 점이 있다면 : 그것이 다운 투표가 나오는 곳이라고 생각합니다.
Tomalak

1

통합 쿼리에 대한 약간의 비틀기 :

DECLARE @Foo TABLE (ID INT, Col1 INT, Col2 INT, Col3 INT)

INSERT @Foo (ID, Col1, Col2, Col3)
VALUES
(1, 3, 34, 76),
(2, 32, 976, 24),
(3, 7, 235, 3),
(4, 245, 1, 792)

SELECT
    ID,
    Col1,
    Col2,
    Col3,
    (
        SELECT MIN(T.Col)
        FROM
        (
            SELECT Foo.Col1 AS Col UNION ALL
            SELECT Foo.Col2 AS Col UNION ALL
            SELECT Foo.Col3 AS Col 
        ) AS T
    ) AS TheMin
FROM
    @Foo AS Foo

1

SQL 2005를 사용하는 경우 다음과 같이 깔끔하게 수행 할 수 있습니다.

;WITH    res
          AS ( SELECT   t.YourID ,
                        CAST(( SELECT   Col1 AS c01 ,
                                        Col2 AS c02 ,
                                        Col3 AS c03 ,
                                        Col4 AS c04 ,
                                        Col5 AS c05
                               FROM     YourTable AS cols
                               WHERE    YourID = t.YourID
                             FOR
                               XML AUTO ,
                                   ELEMENTS
                             ) AS XML) AS colslist
               FROM     YourTable AS t
             )
    SELECT  YourID ,
            colslist.query('for $c in //cols return min(data($c/*))').value('.',
                                            'real') AS YourMin ,
            colslist.query('for $c in //cols return avg(data($c/*))').value('.',
                                            'real') AS YourAvg ,
            colslist.query('for $c in //cols return max(data($c/*))').value('.',
                                            'real') AS YourMax
    FROM    res

이렇게하면 많은 연산자에서 길을 잃지 않습니다. :)

그러나 이것은 다른 선택보다 느릴 수 있습니다.

당신의 선택입니다 ...


내가 말했듯이 이것은 느릴 수 있지만 너무 많은 열이있는 경우 (분명히 정말 나쁜 DB 디자인의 결과입니다!), 이것을 사용할 가치가 있습니다 (적어도 AVG의 경우). 당신은 그것이 좋은 성스러운 암소 인지 나쁜 암소 인지 나에게 힌트를주지 않았습니다 :) 아마도 당신은 내가 알아 내기 위해 위로 / 아래로 투표를 사용해야 할 것입니다.
leoinfo

정말 좋거나 나쁘지 않았습니다.). 저는 데이터베이스 전문가가 아니기 때문에 질문에 사소한 대답이있을 것 같았 기 때문에 "거룩한 암소"라고 말하고있었습니다. 문제에 대한 유연하고 확장 가능한 솔루션을 제공했기 때문에 좋은 것 같습니다!
dreamlax

1

아래에서는 임시 테이블을 사용하여 최소 여러 날짜를 가져옵니다. 첫 번째 임시 테이블은 여러 개의 조인 된 테이블을 쿼리하여 다양한 날짜 (및 쿼리에 대한 다른 값)를 가져오고 두 번째 임시 테이블은 날짜 열 수만큼 패스를 사용하여 다양한 열과 최소 날짜를 가져옵니다.

이것은 본질적으로 통합 쿼리와 같으며 동일한 수의 패스가 필요하지만 더 효율적일 수 있습니다 (경험에 따라 다르지만 테스트가 필요함). 이 경우 효율성은 문제가되지 않았습니다 (8,000 개 레코드). 색인 등을 생성 할 수 있습니다.

--==================== this gets minimums and global min
if object_id('tempdb..#temp1') is not null
    drop table #temp1
if object_id('tempdb..#temp2') is not null
    drop table #temp2

select r.recordid ,  r.ReferenceNumber, i.InventionTitle, RecordDate, i.ReceivedDate
, min(fi.uploaddate) [Min File Upload], min(fi.CorrespondenceDate) [Min File Correspondence]
into #temp1
from record r 
join Invention i on i.inventionid = r.recordid
left join LnkRecordFile lrf on lrf.recordid = r.recordid
left join fileinformation fi on fi.fileid = lrf.fileid
where r.recorddate > '2015-05-26'
 group by  r.recordid, recorddate, i.ReceivedDate,
 r.ReferenceNumber, i.InventionTitle



select recordid, recorddate [min date]
into #temp2
from #temp1

update #temp2
set [min date] = ReceivedDate 
from #temp1 t1 join #temp2 t2 on t1.recordid = t2.recordid
where t1.ReceivedDate < [min date] and  t1.ReceivedDate > '2001-01-01'

update #temp2 
set [min date] = t1.[Min File Upload]
from #temp1 t1 join #temp2 t2 on t1.recordid = t2.recordid
where t1.[Min File Upload] < [min date] and  t1.[Min File Upload] > '2001-01-01'

update #temp2
set [min date] = t1.[Min File Correspondence]
from #temp1 t1 join #temp2 t2 on t1.recordid = t2.recordid
where t1.[Min File Correspondence] < [min date] and t1.[Min File Correspondence] > '2001-01-01'


select t1.*, t2.[min date] [LOWEST DATE]
from #temp1 t1 join #temp2 t2 on t1.recordid = t2.recordid
order by t1.recordid

1
SELECT [ID],
            (
                SELECT MIN([value].[MinValue])
                FROM
                (
                    VALUES
                        ([Col1]),
                        ([Col1]),
                        ([Col2]),
                        ([Col3])
                ) AS [value] ([MinValue])
           ) AS [MinValue]
FROM Table;

0

찾고있는 값 (일반적으로 상태 코드)을 알고 있다면 다음이 도움이 될 수 있습니다.

select case when 0 in (PAGE1STATUS ,PAGE2STATUS ,PAGE3STATUS,
PAGE4STATUS,PAGE5STATUS ,PAGE6STATUS) then 0 else 1 end
FROM CUSTOMERS_FORMS

0

나는 그 질문이 오래되었다는 것을 알고 있지만, 나는 여전히 대답이 필요했고 다른 대답에 만족하지 않았기 때문에 @paxdiablo의 대답 에 비틀린 내 질문을 고안해야했습니다 .


저는 SAP ASE 16.0의 땅에서 왔으며 IMHO가 단일 행의 다른 열에 유효하게 저장된 특정 데이터의 통계 만 들여다보기 만하면되었습니다 (다른 시간을 나타냄-무언가 도착이 계획된시기, 예상되는시기). 행동이 시작되었고 마지막으로 실제 시간이 무엇 이었습니까?) 따라서 열을 임시 테이블의 행으로 바꾸고 평소와 같이 쿼리를 수행했습니다.

NB 앞서가는 단일 크기 솔루션이 아닙니다!

CREATE TABLE #tempTable (ID int, columnName varchar(20), dataValue int)

INSERT INTO #tempTable 
  SELECT ID, 'Col1', Col1
    FROM sourceTable
   WHERE Col1 IS NOT NULL
INSERT INTO #tempTable 
  SELECT ID, 'Col2', Col2
    FROM sourceTable
   WHERE Col2 IS NOT NULL
INSERT INTO #tempTable 
  SELECT ID, 'Col3', Col3
    FROM sourceTable
   WHERE Col3 IS NOT NULL

SELECT ID
     , min(dataValue) AS 'Min'
     , max(dataValue) AS 'Max'
     , max(dataValue) - min(dataValue) AS 'Diff' 
  FROM #tempTable 
  GROUP BY ID

이것은 630000 행의 소스 세트에서 약 30 초가 걸렸고 인덱스 데이터 만 사용했기 때문에 시간이 중요한 프로세스에서 실행되는 것이 아니라 일회성 데이터 검사 또는 하루 종일 보고서와 같은 작업을 수행 할 수 있습니다. 괜찮습니다 (하지만 동료 나 상사에게 확인하십시오!). 에게이 스타일의 주요 보너스 내가 쉽게 데이터를 통해 copyied하고 특히 한번 더 / 덜 열 변화 등, 그룹화 필터링을 사용할 수있는 것이 었습니다.

추가 데이터 ( columnName, maxes, ...)는 내 검색에 도움이되었으므로 필요하지 않을 수도 있습니다. 나는 아이디어를 촉발시키기 위해 여기에 두었습니다 :-).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.