SQL - условные выражения в кросс-таблицах - PullRequest
2 голосов
/ 16 июня 2011

Я работаю с MS Access 2007. У меня есть 2 таблицы: Типы соды и Вероятность .

Типы соды: кока-кола, пепси,Доктор Пеппер и Мелло Желтое

Вероятность - это поиск с помощью следующих опций: Понравилось, Не понравилось, Без предпочтений

Я знаю, как подсчитать количество кока-колы или Мелло Желтого в таблице, используя DCount.(«[Types]», «[Types of Soda]», «[Types]» = «Coke»)

Я также знаю, как подсчитывать количество понравившихся, не понравившихся, без предпочтений.

("[Perception]", "[Likeability]", "[Perception]" = 'Liked')

Но что, если мне нужно посчитать количество "Likes" по типу.

то есть таблица должна выглядеть следующим образом:

             Coke     |        Pepsi       |       Dr. Pepper     |   Mello Yellow   

Likes          9                   2                    12                  19

Dislikes       2                   45                   1                    0

No Preference  0                   12                   14                  15 

Я знаю, что в Access я могу создавать кросс-табличные запросы, но мои таблицы объединяются с помощью идентификатора.Таким образом, моя таблица [Likeability] имеет столбец идентификатора, который совпадает со столбцом идентификатора в моей таблице [Types].Это взаимосвязь, и это то, что связывает мои таблицы.

Моя проблема в том, что я не знаю, как применить условие для подсчета лайков, дислайков и т. Д., ТОЛЬКО для типов, которые я указываю.Кажется, что сначала я должен проверить таблицу [Likeability] на «Likes» и сопоставить идентификатор с идентификатором в таблице [Types].

Я очень смущен, и вы тоже можете,сейчас.Но все, что я хочу сделать, это подсчитать количество лайков и антипатий для каждого типа газировки.

Пожалуйста, помогите.

1 Ответ

5 голосов
/ 16 июня 2011

Не совсем понятно (во всяком случае, для меня), как выглядят ваши таблицы, поэтому давайте предположим следующие

таблицы

Soda
------
Soda_ID (Long Integer (Increment))
Soda_Name (Text(50)


Perception
------
Perception_ID (Long Integer (Increment))
Perception_Name (Text(50)


Likeability
-----------
Likeability_ID (Long Integer (Increment))
Soda_ID (Long Integer)
Perception_ID (Long Integer)
User_ID (Long Integer)

Данные

Soda_Id Soda_Name
------- ---------    
1       Coke
2       Pepsi
3       Dr. Pepper
4       Mello Yellow

Perception_ID Perception_Name
------------- ---------    
1             Likes
2             Dislikes
3             No Preference



Likeability_ID Soda_ID Perception_ID User_ID
-------------- ------- ------------- -------
1              1       1             1
2              2       1             1
3              3       1             1
4              4       1             1
5              1       2             2
6              2       2             2
7              3       2             2
8              4       2             2
9              1       3             3
10             2       3             3
11             3       3             3
12             4       3             3
13             1       1             5
14             2       2             6
15             2       2             7
16             3       3             8
17             3       3             9
18             3       3             10

Запрос преобразования Вы можете написать запрос, подобный этому

TRANSFORM 
      Count(l.Likeability_ID) AS CountOfLikeability_ID
SELECT 
      p.Perception_Name
FROM 
      Soda s 
      INNER JOIN (Perception p 
            INNER JOIN Likeability l 
            ON p.Perception_ID = l.Perception_ID) 
      ON s.Soda_Id = l.Soda_ID
WHERE 
      p.Perception_Name<>"No Preference"
GROUP BY 
      p.Perception_Name
PIVOT 
      s.Soda_Name;

вывод запроса

Perception_Name Coke Dr_ Pepper Mello Yellow Pepsi
--------------- ---- ---------- ------------ -----
Dislikes        1    1          1            3
Likes           2    1          1            1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...