akhter86 Ответов: 2

Как сделать общее количество строк в сводной таблице?


Я хочу настоящего,отсутствующего,CL,H

Date     1    2      3      4   5    P  CL  A
Emp1     P    P      P      P   CL   4  1   0
Emp2     CL   SL     P      P   H    2  2   0
Emp3     A    A      A      P   H    1  0   3


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

Что я уже пробовал:

я пытался преобразовать столбец в строки,Теперь я хочу A, P,CL

ALTER Procedure [dbo].[Pivot_Attendance2]
--@StartDate Date,
--@Enddate   Date

As  
Begin 

SELECT DISTINCT ReportingDate INTO #Datess
FROM EmployeesAttendance
--WHERE     (ReportingDate BETWEEN @StartDate AND @Enddate)
ORDER BY ReportingDate

DECLARE @cols NVARCHAR(4000)
SELECT  @cols = COALESCE(@cols + ',[' + CONVERT(varchar, DATEPART(DAY, ReportingDate), 112)
				+ ']','[' + CONVERT(varchar,DATEPART(DAY, ReportingDate), 112) + ']')
FROM    #Datess
ORDER BY ReportingDate

DECLARE  @qry NVARCHAR(4000) =
N'SELECT * 
FROM (SELECT     EmpID,  CASE WHEN [Days] IS null AND EXISTS
                          (SELECT     1
                            FROM          EmpApplication
                            WHERE      EmployeesAttendance.Empid = EmpApplication.Empid AND 
                            (ReportingDate >= LeavFrom AND ReportingDate <= LeavTo))
                             THEN ''CL''
                             WHEN [Days] IS null AND
                       EXISTS
                          (SELECT     1
                            FROM          Holidays
                            WHERE      ReportingDate = HolidayDate) 
                            THEN ''H'' 
                            WHEN [Days] IS null THEN ''A'' WHEN [Days] = 1 THEN ''P'' END AS Status,
         DATEPART(DAY, ReportingDate)as DDate FROM EmployeesAttendance )emp


PIVOT (MAX(Status) FOR DDate IN (' + @cols + ')) AS stat 
            ORDER BY RNO_ROWTOTAL,''p'';

'
-- Executing the query

EXEC(@qry)
 
END

CHill60

Ваш вопрос не имеет никакого смысла. Попробуйте переписать его - используйте ссылку улучшить вопрос, чтобы обновить этот пост

akhter86

у меня есть данные в столбце,затем я переношу их в строки, теперь я хочу получить общую сумму строк, как я уже упоминал выше ?
П КЛ. А

2 Ответов

Рейтинг:
7

Santosh kumar Pithani

DECLARE  @qry NVARCHAR(4000);


SET @qry=N';WITH CTE AS(
                SELECT EmpID,
				       CASE 
					      WHEN [Days] IS null AND
						    EXISTS
                            (SELECT  1 FROM EmpApplication
                              WHERE      EmployeesAttendance.Empid = EmpApplication.Empid AND 
                              (ReportingDate >= LeavFrom AND ReportingDate <= LeavTo))  THEN ''CL''
                          WHEN [Days] IS null AND
                               EXISTS
                               ( SELECT  1  FROM Holidays WHERE  ReportingDate = HolidayDate)  THEN ''H'' 
						  WHEN [Days] IS null  THEN ''A'' WHEN [Days] = 1 THEN ''P'' 
								   END AS Status,
                       DATEPART(DAY, ReportingDate)as DDate FROM EmployeesAttendance 
					   )


SELECT * FROM (
             SELECT EmpID,Status,Status AS New_status,DDate FROM CTE 
			  ) AS Emp
PIVOT (MAX(Status) FOR DDate IN (' + @cols + ')) AS stat 

PIVOT(COUNT(New_status) FOR New_status IN ([P],[CL],[A])) AS Pvt;'
-- Executing the query

EXEC(@qry)


akhter86

Дорогой @Santosh Kumar вот идет ошибка
(8 строк) затронуты)
Msg 207, Уровень 16, Состояние 1, Строка 19
Недопустимое имя столбца "статус".
Msg 207, Уровень 16, Состояние 1, Строка 19
Недопустимое имя столбца "статус".
Msg 207, Уровень 16, Состояние 1, Строка 21
Недопустимое имя столбца "RNO_ROWTOTAL".

Santosh kumar Pithani

Привет @akhter , вы уже использовали столбец "статус" для pivot, так что вы не можете использовать во второй раз тот же столбец для pivot.Возьмите дополнительные столбцы в качестве "Status AS New_Status"
используйте это для второго поворота.Этот столбец "RNO_ROWTOTAL" не существовал в вашей производной таблице.

akhter86

я использовал
Стержень(число(статус) статус ([п],[сл],[а])) Как New_Status

Заказ по RNO_ROWTOTAL,"p" ;
но впереди та же проблема..пожалуйста проводник

Santosh kumar Pithani

Опубликуйте свою ошибку msg;вы выполнили запрос решения?Я четко упоминается два столбца("статус,статус как New_status") и как их использовать для разворота(поворота (Макс(статус) для DDate в (' + @гуара + ')) Как стат

Стержень(число(New_status) для New_status в ([п],[сл],[а])) Как рядовой;")
...Все еще ваш минимум, чтобы понять свою проблему.

akhter86

Эта ошибка приближается...
(62 строки) затронуты)
Msg 8156, Уровень 16, Состояние 1, Строка 21
Столбец "27" был указан несколько раз для "stat".
Msg 8156, Уровень 16, Состояние 1, Строка 23
Столбец '27' задан несколько раз по 'ПВТ'.

Santosh kumar Pithani

Я думаю, что день(27) повторяется более одного раза, проверьте и убедитесь в этом с помощью
запрос "select @cols"

akhter86

Да, он будет отчитываться за каждого сотрудника в течение дня.

Santosh kumar Pithani

Если это правильно, то отметьте как решение.

Santosh kumar Pithani

Я обновил проверку решения и дайте мне знать!

Рейтинг:
2

CHill60

Вы действительно набрали "to of" ... теперь я понимаю, что вы имеете в виду "total of".

Я предполагаю, что вы имеете в виду, что хотите видеть A+P+CL в качестве нового столбца в своих результатах

Попробуйте что-нибудь вроде этого (непроверенное)

SET qry = 'SELECT *, A+P+CL FROM (' & qry & ') as x'
EXEC(@qry)


akhter86

Извините за ошибку, но вы указали , как использовать, я попытался интегрировать нас с запросом, но не дал resultMsg 102, Уровень 15, состояние 1, строка 29
Неправильный синтаксис рядом с ' & @qry & '

CHill60

Я использовал & .. это должно быть +