Q&A

  • group에 대한 select문
LOC_NO W REPAIR_D EMP_CO MACHIN BAD_CO CHK_QTY

------ - -------- ------- ------ ------- -------

c301 T 20001114 12345 smd#1 ab01 120

c401 T 20001114 12345 smd#2 ab02 120

c501 B 20001114 34211 smd#3 ab03 120

c601 B 20001114 34422 pana ab04 120



위와 같은 데이터가 있습니다.

위의 내용을 아래와 같은 스트링그리드로 나타내려 합니다.

bad_co를 아래와 같이 갯수로 나타내려 합니다.

그룹 조건은 LOC_No입니다. 더 많이 내용이 있겠지만 편의상 한건씩만 올렸습니다.

loc_no가 수백개 이며 bad_co는 30여종류가 됩니다.



LOC_NO ab01 ab02 ab03 ab04

------ ---- ---- ---- ----

c301 1 0 0 0

c401 0 1 0 0

c501 0 0 1 0

c601 0 0 0 1



위와 같이 나타낼 수 있나요 ?

2  COMMENTS
  • Profile
    nilriri 2000.11.14 22:40
    cell wrote:

    > LOC_NO W REPAIR_D EMP_CO MACHIN BAD_CO CHK_QTY

    > ------ - -------- ------- ------ ------- -------

    > c301 T 20001114 12345 smd#1 ab01 120

    > c401 T 20001114 12345 smd#2 ab02 120

    > c501 B 20001114 34211 smd#3 ab03 120

    > c601 B 20001114 34422 pana ab04 120

    >

    > 위와 같은 데이터가 있습니다.

    > 위의 내용을 아래와 같은 스트링그리드로 나타내려 합니다.

    > bad_co를 아래와 같이 갯수로 나타내려 합니다.

    > 그룹 조건은 LOC_No입니다. 더 많이 내용이 있겠지만 편의상 한건씩만 올렸습니다.

    > loc_no가 수백개 이며 bad_co는 30여종류가 됩니다.

    >

    > LOC_NO ab01 ab02 ab03 ab04

    > ------ ---- ---- ---- ----

    > c301 1 0 0 0

    > c401 0 1 0 0

    > c501 0 0 1 0

    > c601 0 0 0 1

    >

    > 위와 같이 나타낼 수 있나요 ?

    데이터 베이스 관련 질문은 데이터베이스 종류와 버젼 개발툴을 명시하시면

    좋겠군요...



    SELECT SUM(DECODE(BAD_CO,'ab01', 1, 0)) AB01,

    SUM(DECODE(BAD_CO,'ab02', 1, 0)) AB02,

    :

    :

    :

    GROUP BY LOC_NO

    오라클의 경위 위처럼하면...

    MS_SQL은 DECODE대신 CASE WHEN THEN ELSE문으로 수정하시면 될거 같은데..



    그럼. 좋은결과...



    microsoft jet database engine을 사용하시면 크로스탭 질의를 이용하면 되구요..

    아래처럼...

    TRANSFORM COUNT(*)

    SELECT OrderID

    FROM Orders

    GROUP BY OrderID

    PIVOT CustomerID;

    ---------------------

    다음은 MDB의 예제샘플...

    --------------------

    다음 예제는 SQL TRANSFORM 절을 사용하여 1994년 분기별로 직원별 주문량을 보여주는 크로스탭 질의를 작성합니다. 다음 프로시저를 실행하려면 SQLTRANSFORMOutput 함수가 필요합니다.



    Sub TransformX1()



    Dim dbs As Database

    Dim strSQL As String

    Dim qdfTRANSFORM As QueryDef



    strSQL = "PARAMETERS prmYear SHORT; TRANSFORM " _

    & "Count(OrderID) " _

    & "SELECT FirstName & "" "" & LastName AS " _

    & "FullName FROM Employees INNER JOIN Orders " _

    & "ON Employees.EmployeeID = " _

    & "Orders.EmployeeID WHERE DatePart " _

    & "(""yyyy"", OrderDate) = [prmYear] "



    strSQL = strSQL & "GROUP BY FirstName & " _

    & """ "" & LastName " _



    & "ORDER BY FirstName & "" "" & LastName " _

    & "PIVOT DatePart(""q"", OrderDate)"



    ' 사용자 컴퓨터의 Northwind경로를 나타내도록 다음 행을 수정하십시오.

    Set dbs = OpenDatabase("Northwind.mdb")



    Set qdfTRANSFORM = dbs.CreateQueryDef _

    ("", strSQL)



    SQLTRANSFORMOutput qdfTRANSFORM, 1994



    dbs.Close



    End Sub



    다음 예제는 SQL TRANSFORM 절을 사용하여 1994년 분기별로 각 직원이 수주한 총 액수를 보여주는 약간 복잡한 크로스탭을 작성합니다. 다음 프로시저를 실행하려면 SQLTRANSFORMOutput 함수가 필요합니다.



    Sub TransformX2()



    Dim dbs As Database

    Dim strSQL As String

    Dim qdfTRANSFORM As QueryDef



    strSQL = "PARAMETERS prmYear SHORT; TRANSFORM " _

    & "Sum(Subtotal) SELECT FirstName & "" """ _

    & "& LastName AS FullName " _

    & "FROM Employees INNER JOIN " _

    & "(Orders INNER JOIN [Order Subtotals] " _

    & "ON Orders.OrderID = " _

    & "[Order Subtotals].OrderID) " _

    & "ON Employees.EmployeeID = " _

    & "Orders.EmployeeID WHERE DatePart" _



    & "(""yyyy"", OrderDate) = [prmYear] "



    strSQL = strSQL & "GROUP BY FirstName & "" """ _

    & "& LastName " _

    & "ORDER BY FirstName & "" "" & LastName " _

    & "PIVOT DatePart(""q"",OrderDate)"



    ' 사용자 컴퓨터의 Northwind경로를 나타내도록 다음 행을 수정하십시오.

    Set dbs = OpenDatabase("Northwind.mdb")



    Set qdfTRANSFORM = dbs.CreateQueryDef _

    ("", strSQL)



    SQLTRANSFORMOutput qdfTRANSFORM, 1994



    dbs.Close



    End Sub



    Function SQLTRANSFORMOutput(qdfTemp As QueryDef, _

    intYear As Integer)



    Dim rstTRANSFORM As Recordset

    Dim fldLoop As Field

    Dim booFirst As Boolean



    qdfTemp.PARAMETERS!prmYear = intYear

    Set rstTRANSFORM = qdfTemp.OpenRecordset()



    Debug.Print qdfTemp.SQL

    Debug.Print

    Debug.Print , , "Quarter"



    With rstTRANSFORM

    booFirst = True

    For Each fldLoop In .Fields

    If booFirst = True Then

    Debug.Print fldLoop.Name

    Debug.Print , ;



    booFirst = False

    Else

    Debug.Print , fldLoop.Name;

    End If

    Next fldLoop

    Debug.Print



    Do While Not .EOF

    booFirst = True

    For Each fldLoop In .Fields

    If booFirst = True Then

    Debug.Print fldLoop

    Debug.Print , ;

    booFirst = False

    Else

    Debug.Print , fldLoop;

    End If

    Next fldLoop

    Debug.Print

    .MoveNext

    Loop

    End With



    End Function



    제가 찾아본 바로는 다른 엔진에서는 크로스탭질의 비슷한 기능은 못찾겠더군요...

    스크립트 상에서 해결을 해야 하지 않을까요?



  • Profile
    공성환 2000.11.14 22:04
    데이타 베이스가 오라클이면 인라인뷰와 디코더를 이용해서 표현하실수 있습니다...

    보통이런거를 짜빠트린다고 하는데...^^

    select max(decode(a.num,1,a.num)),

    max(decode(a.num,2,a.num)),

    max(decode(a.num,3,a.num)),

    max(decode(a.num,4,a.num)),

    max(decode(a.num,5,a.num))

    from(select rownum as num

    from layerlbl

    where rownum <=5) a



    기본적인틀은 이런식입니다



    cell wrote:

    > LOC_NO W REPAIR_D EMP_CO MACHIN BAD_CO CHK_QTY

    > ------ - -------- ------- ------ ------- -------

    > c301 T 20001114 12345 smd#1 ab01 120

    > c401 T 20001114 12345 smd#2 ab02 120

    > c501 B 20001114 34211 smd#3 ab03 120

    > c601 B 20001114 34422 pana ab04 120

    >

    > 위와 같은 데이터가 있습니다.

    > 위의 내용을 아래와 같은 스트링그리드로 나타내려 합니다.

    > bad_co를 아래와 같이 갯수로 나타내려 합니다.

    > 그룹 조건은 LOC_No입니다. 더 많이 내용이 있겠지만 편의상 한건씩만 올렸습니다.

    > loc_no가 수백개 이며 bad_co는 30여종류가 됩니다.

    >

    > LOC_NO ab01 ab02 ab03 ab04

    > ------ ---- ---- ---- ----

    > c301 1 0 0 0

    > c401 0 1 0 0

    > c501 0 0 1 0

    > c601 0 0 0 1

    >

    > 위와 같이 나타낼 수 있나요 ?

    • 김일영
      2000.11.15 00:56
    • 김민석(델초보)
      2000.11.15 18:13
    • 김일영
      2000.11.15 18:14
    • 김민석(델초보)
      2000.11.15 02:47
    • 김일영
      2000.11.15 04:16
    • 김민석(델파이 초보)
      2000.11.15 08:01
    • 초보왕
    • 2000.11.15 00:44
    • 1 COMMENTS
    • /
    • 0 LIKES
    • AONE
      2000.11.15 02:04
      정확한 답변인지 모르지만....LOCATE 를 사용하시면 찾을수 있을것 같은데... 초보왕 wrote: > 델 초보...
    • 초보자
    • 2000.11.14 23:16
    • 1 COMMENTS
    • /
    • 0 LIKES
    • Azurei
      2000.11.15 02:57
      초보자 wrote: > 한 RichEdit에서 한 라인당 80Byte가 입력이 되면 자동으로 > 다음 라인으로 가게끔 할...
    • won
      2000.11.15 05:27
      우선은 ADO를 테스트해보고, 완벽하게 이해하시기 바랍니다. CursorType, LockType을요.. 정답은 가까운 ...
    • AONE
      2000.11.15 02:09
      정확한 답변인지는 모르지만... 첫번째 테이블락을 설정하는 방법 두번째 등록, 수정, 삭제시 해당 테이...
    • 이용희
      2000.11.16 19:46
      castle road wrote: > 볼랜드 BDE 관리자(Admin...) configuration 탭에서 > [-]Configuration > [-...
    • 박인우
      2000.11.15 17:58
      음 제생각에는 혹시 윈98에 오라클 클라이언트를 설치 하셨나요? 확실한 답변은 아니지만 저는 아직 한...
    • 최명관
    • 2000.11.14 22:01
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최진환
      2000.11.15 03:14
      최명관 wrote: > 동적으로 생성할 폼을 avaliable form 으로 지정하고 > > 그 폼을 생성할때 > >...
    • Azurei
      2000.11.15 01:00
      최명관 wrote: > 동적으로 생성할 폼을 avaliable form 으로 지정하고 > > 그 폼을 생성할때 > >...
    • 바보감자
      2000.11.14 23:01
      이야.... 정말 되넹 ㅜ.ㅜ흑흑 정말 감사하구여 select a, max(b) from xxx group by a 이거 다른...
    • 공성환
      2000.11.14 21:55
      select a, max(b) from xxx group by a 하면 님이 원하시는 답변이 될것같습니다... 지금 3개의 로...
    • Azurei
      2000.11.14 21:52
      바보감자 wrote: > 안냐세염~~~~~~~~~~~~~~~ > 바보감자입니당... > 여러분.. 제가 궁금한게 있어서염. ...
    • 임성룡
    • 2000.11.14 21:47
    • 1 COMMENTS
    • /
    • 0 LIKES
    • Azurei
      2000.11.14 21:50
      임성룡 wrote: > 안녕하세요...다름이 아니라 > 버튼의 이벤트 처리를 하는데.... > 계속 누르고 있었...
    • 델러브
    • 2000.11.14 21:52
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 공성환
      2000.11.14 21:57
      예전에 제가 코디으로 무식하게 한적있는데... 검색해보세요... 소스도 올렸습니다... 델러브 wrote: > ...
    • youngae
    • 2000.11.14 20:11
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 타락천사
      2000.11.14 20:15
      안녕하세여.. 타락임다.. ^^ 라인에 넣는게 16바이16 또는 32바이32 를 넣는건가여? 아님, 유저디파...
    • youngae
      2000.11.14 23:19
      타락천사 wrote: > 안녕하세여.. 타락임다.. ^^ > > 라인에 넣는게 16바이16 또는 32바이32 를 넣는건...
    • 타락천사
      2000.11.15 02:19
      안녕하세여.. 타락임다..^^ 아래와 가치 하면 됩니다.. procedure TMainForm.Button2Click(Sender: T...
    • youngae
      2000.11.15 05:24
      아 ~~~ 감동 감동 정말 감사합니다.... 헤헤 근데 지금 저희 멜 서버가 죽어버렸어요..낼이나 돼야 확인...
    • cell
    • 2000.11.14 19:54
    • 2 COMMENTS
    • /
    • 0 LIKES
    • nilriri
      2000.11.14 22:40
      cell wrote: > LOC_NO W REPAIR_D EMP_CO MACHIN BAD_CO CHK_QTY > ------ - -------- ------- ----...
    • 공성환
      2000.11.14 22:04
      데이타 베이스가 오라클이면 인라인뷰와 디코더를 이용해서 표현하실수 있습니다... 보통이런거를 짜빠트...
    • 타락천사
      2000.11.14 20:12
      안녕하세여. 타락임다..^^ 팁모아에 제가 올려놓은 글이 있습니다... "타락천사"로 검색해 보세여.. ...
    • coolling
      2000.11.14 20:03
      자료실이나 강의실에 가면, 실력있는 고수님들이 만들어놓은 시간/날짜 계산 프로그램 소스가 있을겁니다.....
    • 어이! 허준
      2000.11.14 20:10
      버퍼 전송시 4096정도가 안정적 입니다. 8192정도로 하면 패킷을 잃어버리는 경우가 생겨서 전송 Block을 ...
    • 김하늘
      2000.11.15 00:26
      허준의원 나리 답변 감사요... 그럼 4배는 뛸수 있겠네요... 어이! 허준 wrote: > 버퍼 전송시 4096...
    • 이경문
      2000.11.19 14:40
      참고..... TCP/IP로 패킷을 전송하는 방법에는 크게 두가지가 있습니다. 첫번째 방법(안정적인 방법) ...