>  Q&A  >  본문

MySQL - 행을 열로 변환

게시물 검색을 시도했지만 SQL Server/Access에 대한 솔루션만 찾았습니다. MySQL(5.X)에 솔루션이 필요합니다.

hostid, itemname, itemvalue라는 3개의 열이 있는 테이블(기록이라고 함)이 있습니다.

선택(select * from History)을 수행하면

이 반환됩니다. 으아악

유사한 콘텐츠를 반환하기 위해 데이터베이스를 쿼리하는 방법

으아악


P粉538462187P粉538462187372일 전603

모든 응답(1)나는 대답할 것이다

  • P粉920199761

    P粉9201997612023-10-14 10:02:42

    이 문제를 해결하기 위한 단계에 대해 더 길고 자세한 설명을 추가하겠습니다. 너무 길었다면 사과드립니다.


    귀하가 제공한 기초부터 시작하여 이를 사용하여 이 기사의 나머지 부분에서 사용할 몇 가지 용어를 정의하겠습니다. 이것이 기본 테이블이 됩니다:

    으아아아

    이것이 우리의 목표가 될 것입니다. 멋진 피벗 테이블:

    으아아아

    history.hostid 열의 값은 피벗 테이블의 history.hostid 列中的值将成为数据透视表中的y 值history.itemnamey 값이 됩니다. history.itemname 열의 값은 x-values

    가 됩니다(명백한 이유로).

    피벗 테이블 생성 문제를 해결해야 할 때는 3단계 프로세스(선택 사항인 네 번째 단계 포함)를 사용하여 문제를 해결합니다.
    1. 관심 있는 열, 즉 y 값x 값
    2. 을 선택합니다. 추가 열로 기본 테이블 확장 - 각 x 값
    3. 에 대해 하나의 열 확장 테이블 그룹화 및 집계 - y 값당
    4. 한 세트
    5. (선택사항) 집계표를 아름답게 꾸미기

    다음 단계를 문제에 적용하고 결과를 살펴보겠습니다.

    1단계: 관심 있는 열을 선택하세요hostid 提供y 值itemname. 원하는 결과에서 hostidy 값 을 제공하고

    x 값 을 제공합니다. itemname

    2단계: 추가 열을 사용하여 기본 테이블을 확장합니다

    . 우리는 일반적으로 각 x 값에 대해 하나의 열을 원합니다. x 값 열은 NULL 的模式 - itemname = "A" 的行的新列 A:

    입니다. 으아아아

    행 수를 변경한 것이 아니라 열을 추가했을 뿐입니다. 또한 에는 null이 아닌 값이 있고 다른 새 열에는 null 값이 있습니다. 按 hostid 分组

    3단계: 확장 테이블을 그룹화하고 집계합니다

    . y 값을 제공하기 때문에 가 필요합니다. 으아아아 NULL

    (이제 y 값당 하나의 행이 있다는 점에 유의하세요.)

    좋아요, 거의 다 왔어요! 우리는 못생긴 것들을 제거하면 됩니다 .

    4단계: 아름답게 꾸미기

    . 결과 집합이 더 보기 좋게 보이도록 null 값을 0으로 바꾸겠습니다.
    으아아아

    완료되었습니다. MySQL을 사용하여 아름다운 피벗 테이블을 만들었습니다.

    🎜 🎜이 프로세스를 적용할 때 주의할 사항:🎜
    • 추가 열에 사용할 값. 이 예에서는 itemvalue
    • 를 사용했습니다.
    • 추가 열에 사용할 "중립" 값. NULL,但也可能是 0""를 사용했는데 상황에 따라 다릅니다
    • 그룹화할 때 사용할 집계 함수. 나는 sum,但是 countmax 也经常使用(max 단일 행을 구성할 때 자주 사용됨) 여러 행에 분산된 "객체"를 사용함)
    • 여러 열을 사용하여 y 값을 나타냅니다. 이 솔루션은 y 값에 단일 열을 사용하는 것으로 제한되지 않습니다. 추가 열을 삽입하기만 하면 됩니다(group by 子句(并且不要忘记 select그들)

    알려진 제한사항:

    • 이 솔루션은 피벗 테이블에 n개의 열을 허용하지 않습니다. 기본 테이블을 확장할 때 각 피벗 열을 수동으로 추가해야 합니다. 따라서 5 또는 10 x 값의 경우 이 솔루션이 좋습니다. 100위안, 별로 좋지 않아요. 쿼리를 생성하기 위해 저장 프로시저를 사용하는 몇 가지 솔루션이 있지만 보기 흉하고 올바르게 수행하기가 어렵습니다. 현재 피벗 테이블에 많은 열이 있어야 할 때 이 문제를 해결할 수 있는 좋은 방법이 없습니다.

    회신하다
    0
  • 취소회신하다