2012-01-02 6 views
0

Я следующие две таблицы:LEFT OUTER JOIN с DataSets

отдел (DepartmentID (PK), DepartmentName) Проекты (ProjectID (PK), DepartmentID (ФК))

И я хочу, чтобы создать отчет кристалл, который отображает DepartmentID, DepartmentName и NoOfProjectsManagedbyDepartment

Я знаю, что могу получить этот результат с помощью следующего запроса:

SELECT d.DepartmentID, d.DepartmentName, 
     Count(p.ProjectID) AS NoOfProjectsManagedByDepartment 
FROM Departments d LEFT OUTER JOIN Projects p 
    ON d.DepartmentID = p.DepartmentID 
GROUP BY d.DepartmentID, d.DepartmentName 

И в Crystal Reports я использую набор данных с двумя DataTables для отделов и проектов.

Мой вопрос: как я могу выполнить LEFT OUTER JOIN на двух таблицах данных и отображать результат, который я хочу получить в отчете о кристалле? Пожалуйста помоги.

Спасибо заранее

ответ

1

Почему не просто один DataTable, созданный из приведенного выше запроса? Кстати, название отдела должно быть либо частью GROUP BY или, лучше, имеют функцию aggreation

MAX(d.DepartmentName) AS DeptName 

EDIT:

Внешние соединения являются предметом запросов SQL, а не вопрос данных.

Используйте эксперта базы данных, найденного в меню shorcut (Database> Database Expert ...). Здесь выберите текущее соединение (а не DataSets) и используйте команду «Добавить команду». Это открывает редактор запросов SQL, в который вы можете ввести указанный выше запрос.

enter image description here

+0

Привет, Оливье, я на самом деле новичок в Crystal Reports, и я хотел знать, возможно ли в этом случае LEFT OUTER JOIN. – user1126360

0

Я считаю, что решение, которое вы ищете, чтобы добавить DataRelation к набору данных.

// Fetch the columns in the relationship 
var parentColumn = DataSet1.Tables["Department"].Columns["(DepartmentID"]; 
var childColumn = DataSet1.Tables["Projects"].Columns["(DepartmentID"]; 

// Create the relation 
var relation = new DataRelation("ProjectsDepartments", parentColumn, childColumn); 

// And add it to the dataset 
DataSet1.Relations.Add(relation);