ahmed_sa Ответов: 1

Как сделать группу по revision_ID и при повторном отображении даты последней проверки разделенной палочкой | ?


проблема

Как сделать группу по Revision_ID и при повторном отображении даты последней проверки разделенной палочкой | ?

Мне нужно сгруппировать данные по Revision_ID, которые делают подсчет для всех zpartid

каждый revision_ID имеет группу частей .

а когда идентификатор ревизии повторяется два раза, то lastcheckdate-это firstdate | seconddate

а если больше двух раз то выводите текст мульти дата

так как же это сделать, пожалуйста ?

CREATE TABLE [Parts].[LifeCycleMaster](
	[LifeCycleID] [bigint] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
	[ZPartID] [bigint] NOT NULL,
	[LastCheckDate] [date] NULL,
	[Revision_ID] [bigint] NULL,
 CONSTRAINT [PK_LifeCycleMaster_LifeCycleID] PRIMARY KEY CLUSTERED 
(
	[LifeCycleID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY],
 CONSTRAINT [UK_PartID] UNIQUE NONCLUSTERED 
(
	[ZPartID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
Revision_ID	ZPartID	LastCheckDate
12	          10	    12/12/2015
15	          120	    12/01/2014
15	          130	    05/05/2016
20	          170	    09/03/2013
20	          200	    09/05/2016
20	          300	    09/08/2017
		
	FinalResult	
Revision_ID  CountParts  LastCheckDate
12	         1	  12/12/2015
15	         2	  05/05/2016 |12/01/2014
20	         3	  Multi date


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

SELECT lcm.Revision_ID,count(lcm.ZPartID)as CountParts,lcm.LastCheckDate  
FROM parts.LifeCycleMaster lcm group by Revision_ID

1 Ответов

Рейтинг:
0

Wendelius

Я бы посоветовал не объединять даты в одно поле при извлечении данных. Это делает анализ данных излишне сложным на стороне клиента.

Вместо этого, почему бы просто не извлечь данные в отдельных столбцах и добавить логику для интерпретации результата в вызывающую программу. Таким образом, запрос прост, и вам не нужно разбивать данные из одного текстового поля, что может вызвать несколько видов проблем, начиная с форматов дат.

Чтобы получить данные в отдельных столбцах, возможно, что-то вроде

WITH RevAmounts AS (
   SELECT lcm.Revision_ID,
          COUNT(lcm.ZPartID)                 AS CountParts,
          MAX(lcm.LastCheckDate)             AS LatestCheck,
          COUNT( DISTINCT lcm.LastCheckDate) AS DistinctCheckDates
   FROM parts.LifeCycleMaster lcm 
   GROUP BY Revision_ID
)
SELECT 
   ra.Revision_ID,
   ra.CountParts,
   ra.LatestCheck,
   (  SELECT MAX(lcm2.LastCheckDate)
      FROM parts.LifeCycleMaster lcm2
      WHERE lcm2.Revision_ID = ra.Revision_Id
      AND lcm2.LastCheckDate < ra.LatestCheck) AS PreviousCheck,
   ra.DistinctCheckDates
FROM RevAmounts ra