Как написать SQL-запрос для представления значений по горизонтали - PullRequest
1 голос
/ 02 марта 2011

Предположим, у меня есть одна таблица с именем Jobs:

CREATE TABLE [Jobs]
(
    [JOBID] [int] IDENTITY(1,1) NOT NULL,
    [PARTDESC] [nvarchar](64) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
    [OrderPlacedBy] [nvarchar](64) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
    [SpecialistName] [nvarchar](64) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
    [Priority] [int] NOT NULL,
    [Symptoms] [ntext] COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
    [CustomerNotes] [ntext] COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
    [ShopNotes] [ntext] COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
    [JobType] [nvarchar](32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
    [JobState] [nvarchar](32) COLLATE Latin1_General_CI_AS NULL,
    [JobAddedDate] [datetime] NOT NULL,
    [JobStartedDate] [datetime] NULL,
    [JobFinishedDate] [datetime] NULL,
    [JobShippedDate] [datetime] NULL,
    [RecievedDate] [datetime] NULL
)

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

ANA 201,502,605,701,774
BEN 102,103,051
JEN 705,401,402,509,409,408

Специалист может иметь n рабочих мест. Предположим, у специалиста ANA есть 10 рабочих мест, а у BEN 5 рабочих.

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

Как я могу сделать это в SQL?

1 Ответ

3 голосов
/ 02 марта 2011

Марк прав. Не делайте этого в SQL, делайте это на уровне представления. Тем не менее, если вы хотите сделать это, посмотрите здесь: Как вернуть данные из одной строки из 2 разных таблиц с динамическим содержимым в sql

Применительно к вашей ситуации код может быть:

     select SpecialistName , LEFT(JobsIds, len(JobsIds)-1) as JobsIds from 
(SELECT j.SpecialistName ,

      ( SELECT cast(j1.JobsId as varchar(10)) + ','

           FROM Jobs j1

          WHERE j1.SpecialistName = j.SpecialistName

          ORDER BY JobId

            FOR XML PATH('') ) AS JobsIds
      FROM Jobs j
      GROUP BY SpecialistName )A;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...