Bu temel olarak bir pivot tablodur.
Bunu başarmak için güzel bir öğretici burada bulunabilir: http://www.artfulsoftware.com/infotree/qrytip.php?id=78
Bu yazıyı okumanızı ve bu çözümü ihtiyaçlarınıza göre uyarlamanızı öneririm.
Güncelleme
Yukarıdaki bağlantı artık mevcut değil sonra ben burada mysql pivot cevapları arama hepiniz için bazı ek bilgi sağlamak zorunda hissediyorum. Gerçekten çok miktarda bilgi vardı ve oradan her şeyi buraya koymayacağım (daha da fazla bilgi kopyalamak istemediğimden daha fazla), ancak pivot ile nasıl başa çıkılacağı konusunda bazı tavsiyeler vereceğim Sql yolunu genellikle ilk etapta soruyu soran peku örneği ile tablolar.
Belki bağlantı kısa süre sonra tekrar gelir, buna dikkat edeceğim.
Elektronik tablo yolu ...
Birçok kişi bu amaçla MSExcel, OpenOffice veya diğer elektronik tablo araçları gibi bir araç kullanır. Bu geçerli bir çözüm, sadece verileri buraya kopyalayın ve GUI'nin bunu çözmek için sunduğu araçları kullanın.
Ancak ... bu soru değildi ve verilerin elektronik tabloya nasıl girileceği, sorunlu ölçekleme ve benzeri gibi bazı dezavantajlara bile yol açabilir.
SQL yolu ...
Masasına şöyle bir şey göz önüne alındığında:
CREATE TABLE `test_pivot` (
`pid` bigint(20) NOT NULL AUTO_INCREMENT,
`company_name` varchar(32) DEFAULT NULL,
`action` varchar(16) DEFAULT NULL,
`pagecount` bigint(20) DEFAULT NULL,
PRIMARY KEY (`pid`)
) ENGINE=MyISAM;
Şimdi istediğiniz masasına bakın:
company_name EMAIL PRINT 1 pages PRINT 2 pages PRINT 3 pages
-------------------------------------------------------------
CompanyA 0 0 1 3
CompanyB 1 1 2 0
Satırlar ( EMAIL
, PRINT x pages
) koşullara benzer. Ana gruplama şu şekildedir company_name
.
Koşulları ayarlamak için CASE
-statement'ı kullanmak için bağırır. Bir şey tarafından gruba amacıyla, iyi kullanın ... GROUP BY
.
Bu pivotu sağlayan temel SQL şu şekilde görünebilir:
SELECT P.`company_name`,
COUNT(
CASE
WHEN P.`action`='EMAIL'
THEN 1
ELSE NULL
END
) AS 'EMAIL',
COUNT(
CASE
WHEN P.`action`='PRINT' AND P.`pagecount` = '1'
THEN P.`pagecount`
ELSE NULL
END
) AS 'PRINT 1 pages',
COUNT(
CASE
WHEN P.`action`='PRINT' AND P.`pagecount` = '2'
THEN P.`pagecount`
ELSE NULL
END
) AS 'PRINT 2 pages',
COUNT(
CASE
WHEN P.`action`='PRINT' AND P.`pagecount` = '3'
THEN P.`pagecount`
ELSE NULL
END
) AS 'PRINT 3 pages'
FROM test_pivot P
GROUP BY P.`company_name`;
Bu, istenen sonucu çok hızlı bir şekilde sağlamalıdır. Bu yaklaşımın en büyük dezavantajı, pivot tablonuzda ne kadar fazla satır olmasını istiyorsanız, SQL ifadenizde o kadar çok koşul tanımlamanız gerekir.
Bu da ele alınabilir, bu nedenle insanlar hazırlanan ifadeleri, rutinleri, sayaçları ve benzerlerini kullanma eğilimindedir.
Bu konuyla ilgili bazı ek bağlantılar: