Sql server 2008 - создание столбцов из многострочных данных

У меня такой код:

IF (OBJECT_ID('tempdb..#Data') IS NOT NULL)
BEGIN
    DROP TABLE #Data
END

SELECT
    t.Name, x.Time, x.Date, x.Total,
    xo.DrvCommTotal, x.Name2, x.Street, x.Zip,
    r.Route1
INTO 
    #Data
FROM 
    table1 xo WITH(NOLOCK)
LEFT JOIN  
    Table2 t WITH(NOLOCK) ON t.ID = x.ID
LEFT JOIN 
    Route1 r ON r.RouteID = x.RouteID
WHERE 
    x.Client = 1
    AND x.Date = '9/13/2018'
GROUP BY 
    t.Name, x.Time, x.Date, x.Total, xo.DrvCommTotal, x.Name2,
    x.Street, x.Zip, r.Route1
ORDER BY 
    Route1

 SELECT DISTINCT 
     F.*, F2.NumOrders
 FROM 
     #Data F
 LEFT JOIN 
     (SELECT 
          Route1, COUNT(*) NumOrders
      FROM 
          #Data
      GROUP BY 
          Route1) F2 ON F2.Route1 = F.Route1
 LEFT OUTER JOIN 
     (SELECT 
          Street + ',' + Zip Stops, Time, RouteN1
      FROM 
          #Data
      GROUP BY 
          RouteNo1, street, Zip) F3 ON F3.Route1 = F.Route1
WHERE 
    F.Route1 IS NOT NULL
ORDER BY 
    F.Route1

и он предоставляет мне список маршрутов и остановок. Столбец NumOrders позволяет мне узнать, сколько заказов находится на каждом маршруте. Мне нужно, чтобы остановки стали отдельными столбцами. Я помечу Stop1, Stop2 и т. д., Чтобы каждый маршрут представлял собой только одну строку, а вся информация содержалась в строке для одного маршрута.

В настоящее время я использую временную таблицу, потому что данные очень большие. Я могу поиграть со своим оператором SELECT без повторного запуска всего кода.

Как перенести остановки для каждого маршрута в столбцы?

Вы согласны с грязным чтением? А как насчет случайного получения повторяющихся и / или отсутствующих строк? А как насчет строк, в которых одни столбцы верны, а другие нет? Если вы ответили НЕТ на любой из этих вопросов, вам следует прекратить использовать эту подсказку NOLOCK. blogs.sentryone.com/aaronbertrand/bad-habits-nolock-everywhe‌ re

Sean Lange 13.09.2018 18:17

Для рассматриваемого вопроса нам нужны некоторые детали. Здесь - отличное место для начала.

Sean Lange 13.09.2018 18:17

Привет. Вы хотите повернуться. Это часто задаваемые вопросы. Например, введите название в Google. Пожалуйста, всегда гуглите много четких, кратких и конкретных версий / формулировок вашего вопроса / проблемы / цели с вашими конкретными строками / именами и без них и читайте много ответов. Добавьте в поисковые запросы релевантные ключевые слова, которые вы обнаружите. Если вы не нашли ответа, отправьте сообщение, используя поиск по одному из вариантов по заголовку и ключевым словам для тегов. См. Как спросить и т. д. И текст при наведении курсора на стрелку вниз.

philipxy 13.09.2018 20:18

Возможный дубликат Преобразование строк в столбцы с помощью Pivot в SQL Server

philipxy 13.09.2018 20:29
1
4
18
1

Ответы 1

Хм .. Не совсем уверен, что понимаю вопрос, но похоже, что вы хотите развернуть данные так, чтобы маршруты разбивались на столбцы. Если это так, я бы использовал sql Pivot. Вот пример из документации:

USE AdventureWorks2014;  
GO  
SELECT VendorID, [250] AS Emp1, [251] AS Emp2, [256] AS Emp3, [257] AS Emp4, [260] AS Emp5  
FROM   
(SELECT PurchaseOrderID, EmployeeID, VendorID  
FROM Purchasing.PurchaseOrderHeader) p  
PIVOT  
(  
COUNT (PurchaseOrderID)  
FOR EmployeeID IN  
( [250], [251], [256], [257], [260] )  
) AS pvt  
ORDER BY pvt.VendorID; 

Также вот ссылка на то, как использовать pivot: https://docs.microsoft.com/en-us/sql/t-sql/queries/from-using-pivot-and-unpivot?view=sql-server-2017

Поскольку у вас уже есть все данные в вашей временной таблице, вы можете изменить это на выходе.

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

philipxy 13.09.2018 20:17

@philipxy, спасибо за комментарий и, честно говоря, я должен был попросить его уточнить. Однако, учитывая предоставленную им информацию, я изо всех сил старался ему помочь. Если я был неправ, да ладно, я зря потратил свое время, и он тоже. Если бы я был прав, он бы уже пытался исправить свою проблему. Итак, я бросил кости с осознанным предположением.

camba1 14.09.2018 21:58

Остерегайтесь голосов против. На вопросы, которые следует закрыть, в том числе из-за непонятности, не следует отвечать. Ответы на нечеткие вопросы приводят к беспорядочным сообщениям, поскольку вопросы и ответы меняются, а комментарии накапливаются. Вы можете погуглить "site: Обмен мета-стека", отвечая на непонятные вопросы. Если вопрос не ясен, не является ли плохой практикой все же пытаться ответить? PS Ваш ответ настолько общий (отчасти потому, что вопрос непонятен), что по сути это слово «точка поворота». Это комментарий. Так что это не очень «полезно» - см. Тексты стрелки ответа при наведении курсора мыши. Как ответить

philipxy 14.09.2018 22:56

Другие вопросы по теме