Вопрос

Хорошо, вот мой первоначальный вопрос;

Первая таблица содержит

ID|Name  
1  Mary  
2  John  

Таблица вторая содержит

ID|Color  
1  Red  
1  Blue
2  Blue  
2  Green  
2  Black  

Я хочу закончить это

ID|Name|Red|Blue|Green|Black  
1  Mary Y   Y  
2  John     Y     Y     Y

Кажется, что, поскольку в первой таблице имеется 11 уникальных значений цвета и тысячи записей в первой таблице, «хорошего» способа сделать это не существует.Итак, еще два вопроса.

Есть ли эффективный способ запроса для получения этого результата?Затем я могу создать перекрестную таблицу в своем приложении, чтобы получить желаемый результат.

ID|Name|Color  
1  Mary  Red  
1  Mary  Blue  
2  John  Blue  
2  John  Green  
2  John  Black

Если бы я хотел ограничить количество возвращаемых записей, как бы я мог выполнить запрос, чтобы сделать что-то подобное?

Where ((color='blue') AND (color<>'red' OR color<>'green'))

Итак, используя приведенный выше пример, я бы вернулся

ID|Name|Color  
1  Mary  Blue  
2  John  Blue  
2  John  Black

Я подключаюсь к таблицам Visual FoxPro через ADODB, чтобы использовать SQL.Спасибо!

Это было полезно?

Решение

Из вашего предыдущего вопроса и запроса на таблицу VFP вы можете получить свои результаты по следующему квалифицированному VFP -запросу ...перекрестная таблица завершена

select
      N.ID,
      N.Name,
      MAX( IIF( C.Color = "Red", "Y", " " )) Red,
      MAX( IIF( C.Color = "Blue", "Y", " " )) Blue,
      MAX( IIF( C.Color = "Green", "Y", " " )) Green,
      MAX( IIF( C.Color = "Black", "Y", " " )) Black
   FROM
      C_Names N,
      Colors C
   WHERE
      N.ID = C.ID
   GROUP BY 
      N.ID,
      N.Name

Затем, поскольку у вас есть другие «цвета», просто скопируйте MAX( IIF()) для этого соответствующего цвета и укажите столбец в качестве имени столбца результата...по той же схеме.Единственная проблема заключается в том, что если у вас другое написание цветов с учетом регистра, вам может потребоваться UPPER( C.Color ) = "RED" (или аналогичное для других цветов).

Другие советы

Вы хотите создать перекрестный запрос.Вы можете попробовать использовать мастер перекрестных запросов:
http://msdn.microsoft.com/en-us/library/aa979431%28VS.71%29.aspx

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top