Рейтинг:
11
Tharaka MTR
для этого я рекомендую вам использовать запрос CROSSTAB. В сводной таблице SQL.
http://blogs.msdn.com/b/spike/archive/2009/03/03/pivot-tables-in-sql-server-a-simple-sample.aspx[^]
http://msdn.microsoft.com/en-us/library/ms177410(v=sql. 105). aspx[^]
попробуйте себя. Если у вас есть какие-либо вопросы, не стесняйтесь их задавать.
-------------------------
Проблема с вашей сводной агрегацией. вы можете использовать что-то линейное MAX([Status])
SELECT [EmpCode], [ProjectName],[1] , [2],[3],[4],[5]
FROM
(SELECT Day([AttendanceDate]) as d1, [EmpCode],[ProjectName],[AttendanceDate] , [Status]
FROM [tebs].[dbo].[View_Attendance]) p
PIVOT(
MAX([Status])
FOR d1 IN ( [1] , [2],[3],[4],[5]) ) AS pvt
ORDER BY
pvt.[EmpCode], pvt.[ProjectName];
pryashrma
Спасибо за предложение, я попробовал, но sql express выдает следующую ошибку: неправильный синтаксис рядом с ключевым словом "FOR".
Я понятия не имею, как устранить эту ошибку
Запрос:
Выберите [EmpCode], [ProjectName],[1] , [2],[3],[4],[5]
ОТ
(Выберите день ([AttendanceDate]) как d1, [EmpCode], [ProjectName], [AttendanceDate], [Status]
От [tebs]. [dbo].[View_Attendance]) Р
СТЕРЖЕНЬ(
[Статус]
Для d1 IN ( [1] , [2],[3],[4],[5]) ) как рядовой
ЗАКАЗАТЬ ПО
pvt. [EmpCode], pvt.[Имя проекта];
Может у плз помогите!
Tharaka MTR
Какова ваша версия SQL express? 2005? 2008? и т. д..
Tharaka MTR
Я обновил свой ответ, изменив ваш запрос. пожалуйста, проверьте.
pryashrma
Спасибо, что ответили!
Проблема еще не решена, теперь запрос генерирует n строк для n дат посещаемости для каждого сотрудника... Любое предложение...
EmpCode Имя Проекта 1 2 3 4 5
------- ----------- - - - - -
А100 Р1 нуль нуль нуль нуль П
А100 Р1 нуль нуль нуль нуль П
A100 p1 NULL NULL NULL NULL P
А100 Р1 нуль нуль нуль нуль нуль
А101 Р3 нуль нуль нуль нуль П
А101 Р3 нуль нуль нуль нуль П
A101 p3 NULL NULL NULL NULL L
А102 Р3 нуль нуль нуль нуль П
А102 Р3 нуль нуль нуль нуль П
А102 Р3 нуль нуль нуль нуль
.
.
и я еще прошу ... не могли бы вы объяснить, почему был использован " max (status)"????
Member 13427569
В коде удалить [AttendanceDate] возле инструкции Select--&ГТ;(выберите день([AttendanceDate]) как D1, [EmpCode],[имя_проекта] , [статус]
От [tebs]. [dbo].[View_Attendance]) это должно быть как выше
Tharaka MTR
для быстрого ответа Макс (статус):
вам необходимо предоставить функцию агрегации для сводного запроса.. для этого можно использовать MAX, MIN..
В сводном запросе вы хотите использовать строковые строки, отображаемые в виде столбца. таким образом, лучшая функция агрегации для этого-MAX или MIN
Tharaka MTR
если вы можете, пожалуйста, предоставьте пример сценария данных..
pryashrma
Используйте [dbAttendance]
ГО
/ * * * * * * Объект: таблица [dbo].[tblAttendance] Дата Написания Сценария: 03.07.2013 10:14:55 ******/
УСТАНОВИТЕ ANSI_NULLS ON
ГО
УСТАНОВИТЕ QUOTED_IDENTIFIER НА
ГО
УСТАНОВИТЬ ПАРАМЕТР ANSI_PADDING НА
ГО
Создайте таблицу [dbo].[tblAttendance](
[AttendanceId] [bigint] IDENTITY(1,1) NOT NULL,
[EmpCode] [varchar](50) NOT NULL,
[Имя проекта] [varchar](50) NOT NULL,
[Status] [char](1) NOT NULL,
[AttendanceDate] [дата] NOT NULL,
[AttendanceBy] [varchar](50) NOT NULL,
[DOE] [datetime] NOT NULL,
[Одобрено] [varchar] (50) NULL,
[ApprovedOn] [datetime] NULL,
[ApprovedFlag] [char](1) NOT NULL,
[Комментарии] [nvarchar] (1500) NULL,
Ограничение [PK_tblAttendance] первичный ключ КЛАСТЕРИЗОВАН
(
[AttendanceId] ASC
)С (КАК = ВЫКЛ, STATISTICS_NORECOMPUTE = OFF, ТО ЗНАЧЕНИЕ IGNORE_DUP_KEY = OFF, ТО ПАРАМЕТРЫ ALLOW_ROW_LOCKS = ON, ТО ALLOW_PAGE_LOCKS ИНСТРУКЦИИ =) НА [ОСНОВНОЙ]
) НА [ПЕРВИЧНОМ]
ГО
НАБОР ВЫБРАНО ЗНАЧЕНИЕ ВЫКЛ.
ГО
Метод exec sys файла.в разделе sp_addextendedproperty @имя=Н'MS_Description', @значение=н'Present-П; отсутствует-а; оставить-л; тур-Т; праздник-ч; воскресенье-с;' , @level0type=Н'SCHEMA',@level0name=Н'dbo', @level1type=Н штрек',@level1name=Н'tblAttendance', @level2type=Н'COLUMN',@level2name=Н'Status'
ГО
Метод exec sys файла.в разделе sp_addextendedproperty @имя=Н'MS_Description', @значение=н'Pending-П; утверждена-а; отклонено-Р' , @level0type=Н'SCHEMA',@level0name=Н'dbo', @level1type=Н штрек',@level1name=Н'tblAttendance', @level2type=Н'COLUMN',@level2name=Н'ApprovedFlag'
ГО
CHill60
"Любые предложения" - отправьте вопрос с помощью задавать вопрос ссылка в верхней части страницы. Обязательно включите свой код и четкое описание проблемы. Примерные данные тоже всегда хорошая идея