Akhil Jain Ответов: 1

Один отчетливый кол. О множественном выборе


здесь я выбираю много кол. но я хочу только
x.PurchaseOrderNumber
чтобы быть отчетливым.
я использовал

SELECT  disctinct(x.PurchaseOrderNumber), x.DateRaised AS DateRaised, LEFT(x.Description, 100) as Description, x.TotalValue, x.SupplierName,   
  x.POStatus,  
   x.TenantRecharge, x.JobActivity, x.BuildingName, x.BuildingID, x.ReferenceNumber, x.PaymentStatus , x.ACCTNUM, x.TotalCost  


но это не служит цели

я даже использовал group by
x.PurchaseOrderNumber
но это для того, чтобы я использовал агрегированную функцию, которую я не хочу использовать !!

SELECT  x.PurchaseOrderNumber, x.DateRaised AS DateRaised, LEFT(x.Description, 100) as Description, x.TotalValue, x.SupplierName,   
  x.POStatus,  
   x.TenantRecharge, x.JobActivity, x.BuildingName, x.BuildingID, x.ReferenceNumber, x.PaymentStatus , x.ACCTNUM, x.TotalCost  
  FROM  wsm_View_PODashboardList AS X
  INNER JOIN dbo.wsm_WorkOrder_PurchaseOrder wp ON wp.PurchaseOrderNumber = X.PurchaseOrderNumber
  INNER JOIN dbo.wsm_WorkOrderSchedule wo ON wo.WONumber = wp.WONumber
  where X.POStatus  in ('Created','Authorised','Sent','Matched')  
and wo.WOStatus in ('New Request','Delayed','Scheduled','Work In Progress')  
and wo.EstCompletionDate <= getdate ()  
and wo.siteid in (select wsm_ContactSite.siteid from wsm_ContactSite where wsm_ContactSite.contactid = @ContactID)  ORDER BY X.DateRaised DESC


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

я использовал

SELECT  disctinct(x.PurchaseOrderNumber), x.DateRaised AS DateRaised, LEFT(x.Description, 100) as Description, x.TotalValue, x.SupplierName,   
  x.POStatus,  
   x.TenantRecharge, x.JobActivity, x.BuildingName, x.BuildingID, x.ReferenceNumber, x.PaymentStatus , x.ACCTNUM, x.TotalCost  


но это не служит цели

я даже использовал group by
x.PurchaseOrderNumber
но это для того, чтобы я использовал агрегированную функцию, которую я не хочу использовать !!

OriginalGriff

"это не служит цели" ничего нам не говорит - и поскольку у нас нет доступа к вашей базе данных или какого-либо представления о том, какой результат вы получаете или ожидаете, мы мало что можем сделать.
Попробуйте показать пример входных и выходных данных и объяснить, какая их часть "не служит цели"...
Используйте виджет" улучшить вопрос", чтобы отредактировать свой вопрос и предоставить более подробную информацию.

Richard Deeming

Если вы хотите вернуть различные значения для одного столбца, то вам нужно сказать SQL, что делать, когда есть несколько значений для других столбцов.

Единственный способ сделать это-использовать агрегатные функции.

1 Ответов

Рейтинг:
0

NightWizzard

Во-первых, вы не можете использовать DISTINCT на одной колонке. Если ваш запрос возвращает несколько столбцов. DISTINCT всегда сводите результат к тем строкам, где комбинация все значения столбцов уникальны.

Я предполагаю, что JOINs приводит к нескольким результатам строк для каждой строки в X потому что Соединенные таблицы имеют к нему отношение 1:n. Если вы хотите получить только одну строку в качестве результата, вам нужно либо изменить предложение where так, чтобы оно возвращало только одно совпадение, либо подумать о том, что вы хотите вернуть PurchaseOrderNumber:
1) только первый матч - тогда используйте TOP 1 предложение ограничить результат первой совпадающей записью
2) в MIN, MAX, AVERAGE или SUM из всех PurchaseOrderNumberв результате строки, а затем использовать принадлежащие агрегатную функцию