다음과 같은 MySQL 테이블이 있는 경우:
<사전>company_name 작업 페이지 수
----------------------------------
A사 인쇄 3
A사 인쇄 2
A사 인쇄 3
회사 비메일
B사 PRINT 2
B사 PRINT 2
B사 인쇄 1
A사 인쇄 3
</pre>
MySQL 쿼리를 실행하여 다음과 같은 출력을 얻을 수 있습니까?
company_name 이메일 1페이지 인쇄 2페이지 인쇄 3페이지 인쇄
------------------------------------- ----------
A사 0 0 1 3
B사 1 1 2 0
</pre>
아이디어는 <code>pagecount</code>가 변경될 수 있으므로 출력의 열 수에 이를 반영해야 한다는 것입니다. 각 <code>action</code>/<code>pagecount</code>에 대해 하나의 열이 필요합니다. ; 그리고 각 <code>company_name</code>에 대한 조회 수를 계산합니다. 이것을 피벗 테이블이라고 부르는지는 잘 모르겠지만 누군가 이것을 제안했습니다.
내 솔루션은 피벗 없이 T-SQL을 사용하는 것입니다.
으아아아이것은 기본적으로 피벗 테이블입니다.
이를 구현하는 방법에 대한 자세한 튜토리얼은 여기에서 찾을 수 있습니다: http://www.artfulsoftware.com/infotree/qrytip.php?id=78
이 기사를 읽고 이 솔루션을 필요에 맞게 조정하는 것이 좋습니다.
업데이트
위 링크는 현재 더 이상 사용할 수 없으므로 여기에서 mysql 피벗 테이블에 대한 답변을 찾는 사람에게 몇 가지 추가 정보를 제공해야 할 의무감을 느낍니다. 여기에는 많은 정보가 있으므로 여기에 모든 내용을 복사하지는 않겠습니다(그들의 방대한 지식을 복사하고 싶지는 않지만). 그러나 SQL을 사용하여 피벗 테이블로 작업하는 방법에 대한 몇 가지 조언을 제공하고 먼저 질문을 한 peku의 예입니다.
곧 링크가 다시 올라올 수도 있으니 주의 깊게 살펴보겠습니다.
스프레드시트 방법...
많은 사람들이 이러한 목적으로 MSExcel, OpenOffice 또는 기타 스프레드시트 도구를 사용합니다. 이것은 유효한 솔루션입니다. 데이터를 거기에 복사하고 GUI에서 제공하는 도구를 사용하여 문제를 해결하십시오.
하지만...이것은 문제의 핵심이 아니며 데이터를 스프레드시트로 가져오는 방법, 확장성 문제 등과 같은 몇 가지 단점으로 이어질 수도 있습니다.
SQL 방식...
그의 시계가 다음과 같다고 가정해 보세요:
으아아아이제 그/그녀가 기대하는 것이 무엇인지 표를 살펴보세요:
으아아아선(
EMAIL
,PRINT x pages
)表示条件。主要的分组是按company_name
진행되었습니다.조건을 설정하려면
CASE
CASE
语句。为了按某个东西进行分组,使用...GROUP BY
문을 사용하는 것이 더 적합합니다. 항목별로 그룹화하려면...GROUP BY
를 사용하세요.이 피벗 테이블을 제공하는 기본 SQL은 다음과 같습니다.
으아아아이렇게 하면 원하는 결과가 매우 빠르게 제공됩니다. 이 접근 방식의 가장 큰 단점은 피벗 테이블에 필요한 행이 많을수록 SQL 문에서 정의해야 하는 조건이 더 많아진다는 것입니다.
이것도 해결이 가능하므로 사람들은 준비된 명령문, 루틴, 카운터 등을 사용하는 경향이 있습니다.
이 주제에 대한 추가 링크: