2010-07-08 12 views
0

Pourriez-vous me aider à vérifier comme ci-dessous:Comment interroger 4 tableaux croisés dynamiques

DECLARE @tblCity TABLE (CityID INT, CityName VARCHAR(100)) 
DECLARE @tblHotel TABLE (HotelID INT, HotelName VARCHAR(100)) 
DECLARE @tblTourClass TABLE (TourClassID INT, TourClass VARCHAR(100)) 
DECLARE @tblTourHotel TABLE (id INT, CityID INT, HotelID INT, TourClassID INT) 

INSERT INTO @tblCity SELECT 1, 'Phnom Penh' UNION SELECT 2, 'Siem Reap' UNION SELECT 3, 'Sihanouk Vill' 
INSERT INTO @tblHotel SELECT 1, 'City Angkor Hotel' UNION SELECT 2, 'Phnom Penh Hotel' UNION SELECT 3, 'Sihanouk Ville Hotel' UNION SELECT 4, 'New York Hotel' UNION SELECT 5, 'Pacific Hotel' UNION SELECT 6, 'Angkor Star Hotel' UNION SELECT 7, 'Khemera Angkor Hotel' UNION SELECT 8, 'Sokha beach Hotel' UNION SELECT 9, 'Costle Hotel' 
INSERT INTO @tblTourClass SELECT 1, 'Deluxe Class' UNION SELECT 2, 'Superior Class' UNION SELECT 3, 'Standard Class' 
INSERT INTO @tblTourHotel SELECT 1, 1, 2, 1 UNION SELECT 2, 2, 1, 1 UNION SELECT 3,3,3,1 UNION SELECT 4,1,4,2 UNION SELECT 5,1,5,3 UNION SELECT 6,2,6,2 UNION SELECT 7,2,7,3 UNION SELECT 8,3,8,2 UNION SELECT 9,3,9,3 

Voici la requête réelle:

SELECT CityName, [Deluxe Class], [Superior Class], [Standard Class] 
FROM 
(
SELECT tc.*, h.*, c.* 
FROM @tblTourClass tc 
    LEFT JOIN @tblTourHotel th ON tc.TourClassID = th.TourClassID 
    LEFT JOIN @tblCity c ON th.CityID = c.CityID 
    LEFT JOIN @tblHotel h ON th.HotelID = h.HotelID 
) AS sourcetable 
PIVOT 
( MAX(HotelName) 
    FOR TourClass IN ([Deluxe Class], [Superior Class], [Standard Class]) 
) AS pivottable 
WHERE CityName IS NOT NULL 

Et les résultats:

City Name  Deluxe Class   Superior First Standard 
Siem Reap  City Angkor Hotel  NULL NULL NULL 
Phnom Penh  Phnom Penh Hotel  NULL NULL NULL 
Sihanouk Vill Sihanouk Ville Hotel NULL NULL NULL 

Mais je souhaitez afficher en soufflet:

City Name Deluxe Class  Superior   Standard 
Siem Reap CityAngkor Hotel Angkor Star Hotel Khemera Angkor Hotel 
Phnom Penh Phnom Penh Hotel New York Hotel  Pacific Hotel 
Sihanouk Sihanouk Hotel Sokha beach Hotel Costle Hotel 

Pourriez-vous m'aider à faire comment afficher ci-dessus.

merci beaucoup

+0

Quelle base de données? Quelle version ?? Pouvez-vous décrire ce que vous essayez de réaliser? –

+0

SQL Server 2005 – Kosaly

Répondre

1

Essayez ceci:

SELECT 
    pvt.CityName, 
    pvt.[Deluxe Class], 
    pvt.[Superior Class], 
    pvt.[Standard Class] 
FROM ( 
SELECT 
    c 
    .CityName, 
    h.HotelName, 
    tc.TourClass 
FROM @tblCity c 
LEFT JOIN @tblTourHotel th ON c.CityID = th.CityID 
LEFT JOIN @tblHotel h ON th.HotelID = h.HotelID 
LEFT JOIN @tblTourClass tc ON th.TourClassID = tc.TourClassID 
) t 
PIVOT (
    MAX(HotelName) 
    FOR TourClass IN ([Deluxe Class], [Superior Class], [Standard Class]) 
) AS pvt 

Il ressemble à l'aide SELECT tc.*, h.*, c.*, le calcul de la valeur globale est devenue un problème. Mais j'ai aussi réarrangé la requête afin que @tblCity soit la base de tous les JOINS GAUCHE.

+0

Cher Monsieur merci beaucoup pour votre aide, le problème a été résolu. – Kosaly

+0

Bonjour, One More Je veux afficher sur asp.net alors comment puis-je faire. – Kosaly

+0

Je poserais cela comme une nouvelle question avec les spécifications de ce que vous devez accomplir. – 8kb