2014-11-20 4 views
-1

У меня есть 3 таблицы: (упрощенные на этот вопрос)Пользовательские помощь запроса требуется

  • REQUIREMENTS: ID (PK), RequirementDescription
  • CUSTOMERS: ID (PK), CustomerName
  • CUSTOMER_REQUIREMENTS (Join стол): ID (PK), RequirementID (FK в таблице требований), CustomerID (FK для CUSTOMERS таблицы), DateCompleted

Вопрос: Мне нужно сделать GridView в ASP.NET, BASICA lly показывает требования слева, все клиенты как заголовки столбцов и DateCompleted как «пересечение». Как я могу это сделать?

Например:

Screenshot

+1

Покажите нам ваши ** текущие усилия ** и объяснить, где вы «Застрял! –

ответ

1

Попробуйте выполнить SQL и заменить временные таблицы с таблицей:

CREATE TABLE #requirements ( ID INT, RequirementDescription VARCHAR (100) )

CREATE TABLE #CUSTOMERS ( ID INT, CustomerName УАКСНАК (100) )

CREATE TABLE #CUSTOMER_REQUIREMENTS ( ID INT, RequirementID INT, CustomerID INT, DateCompleted ДАТА )

INSERT INTO #requirements VALUES (1, 'Requirement1')

INSERT INTO #requirements ЗНАЧЕНИЯ (2, 'Requirement2')

ВСТАВИТЬ В К #requirements ЗНАЧЕНИЯ (3, 'Requirement3')

INSERT INTO #requirements ЗНАЧЕНИЯ (4, 'Requirement4')

INSERT INTO #CUSTOMERS VALUES (1, 'Джон')

INSERT INTO # КЛИЕНТЫ ЗНАЧЕНИЯ (2, 'МЭРИ')

INSERT INTO #CUSTOMERS ЗНАЧЕНИЯ (3, 'ЛПП')

INSERT INTO #CUSTOMER_REQUIREMENTS ЗНАЧЕНИЯ (1,1,1, '2-2-2014')

INSERT INTO #CUSTOMER_REQUIREMENTS ЗНАЧЕНИЯ (1,2,1, '2-2-2014')

INSERT INTO #CUSTOMER_REQUIREMENTS ЗНАЧЕНИЯ (1,1,2, '2-2-2014')

ВСТАВИТЬ INTO #CUSTOMER_REQUIREMENTS VALUES (1,2,2, '') 2-2-2014

INSERT INTO #CUSTOMER_REQUIREMENTS VALUES (1,3,2, '') 2-2-2014

INSERT INTO # КЛИЕНТСКИЕ ПРЕДПИСАНИЯ ЦЕННОСТИ (1,4,2, '2-2-2014')

DECLARE @DynamicPivotQuery AS NVARCHAR (MAX)

DECLARE @ColumnName AS NVARCHAR (MAX)

ВЫБОР @ ColumnName = ISNULL (@ColumnName + ' ''') + QUOTENAME (CustomerName) ОТ (SELECT DISTINCT FROM CustomerName #CUSTOMERS) как курсы

SET @DynamicPivotQuery = N'SELECT ReqID, ReqDes "+ @ColumnName + ОТ ( ВЫБОР TEMP.ReqID, TEMP.ReqDes, TEMP.CusName, CusReq.DateCompleted ОТ ( ВЫБОР req.ID как ReqID, req.RequirementDescription как ReqDes, cus.ID как CusID, cus.CustomerName как CusName ИЗ #requirements REQ #, CUSTOMERS CUS ) КАК TEMP ЛЕВЫЙ РЕГИСТРИРУЙТЕСЬ #CUSTOMER_REQUIREMENTS как CusReq ПО TEMP.ReqID = CusReq.RequirementID И Temp.CusID = CusReq.CustomerID ) AS TEMP1 PIVOT (MAX (TEMP1.DateCompleted) ДЛЯ CusName IN ('+ @ColumnName +)) AS P VTTable»

EXEC sp_executesql @DynamicPivotQuery

DROP TABLE #CUSTOMER_REQUIREMENTS

DROP TABLE #CUSTOMERS

DROP TABLE #requirements

+0

Спасибо! Отличный пример! Может ли основная обработка (после создания/заполнения временных таблиц) быть преобразована в 1 строку SELECT-оператора без переменных? – WebDevGuy

+0

@WebDevGuy, если столбец, который имеет поворот, имеет статические/фиксированные данные, тогда вы можете заменить динамический запрос на инструкцию select. Но когда данные столбца динамичны, как клиент, добавлен ли новый клиент, и вы должны показать все из них, тогда вам нужно создать динамический sql. – Sandeep

Смежные вопросы