У меня есть ЗЕЬЕСТ следующим образом:SQL: Дать долю в SELECT (ХП)
select car.car_ID,isnull(#tmpCount.RowCounter,0) AS RowCounter,ISNULL(#tmpNotServiced.DistinctCounter,0) AS DistinctCounter, ISNULL(#tmpNA.NACounter,0) AS NACounter, (isnull(#tmpCount.RowCounter,0) + ISNULL(#tmpNotServiced.DistinctCounter,0) + ISNULL(#tmpNA.NACounter,0)) AS Total, (CASE ISNULL(#tmpNotServiced.DistinctCounter,0) WHEN 0 THEN 'Closed' ELSE 'Open' END) AS Status
from car
left outer join #tmpCount
on car.AUD_ID = #tmpCount.car_ID
left outer join #tmpNotServiced
on car.AUD_ID = #tmpNotServiced.car_ID
LEFT OUTER JOIN #tmpNA
ON car.car_ID = #tmpNA.car_ID
Затем ХП [p_GetServiced], который считает все открытым и закрыто.
CREATE PROCEDURE [dbo].[p_GetServiced]
AS
BEGIN
SET NOCOUNT ON;
CREATE TABLE #tmp1
(
car_ID BIGINT,
RowCounter BIGINT,
DistinctCounter BIGINT,
NACounter BIGINT,
Total BIGINT,
[Status] VARCHAR(MAX)
)
CREATE TABLE #tmp2 (car_ServiceDate DATETIME)
INSERT INTO #tmp1
EXEC [p_GetServiceDetail]
SELECT [Status] AS [Serviced], COUNT(*) AS [Status] FROM #tmp1
GROUP BY [Status]
INSERT INTO #tmp2
SELECT car_TargetDate FROM dbo.car
END
GO
Я хочу, чтобы сделать его вернуть 'Обслуживаемые' и фракция (2 из 5), например: ремонт (2 из 5) ИЛИ NotServiced (3 из 5)
ПРИМЕЧАНИЕ: 2 является открытые и 5 общих ряды
Отличный ответ, просто задание вопросов: так что это было в основном согласование с подсчетом? – inzefinite
@inzefinite Это была конкатенация подсчета подзапросов с общим подсчетом таблицы. Это может быть намного более аккуратно, если я вытащил результаты функции «COUNT» для разделения переменных, а затем конкатенирует их позже. – XN16