Преобразование BIGINT для отображения в виде столбца Nvarchar - PullRequest
0 голосов
/ 14 мая 2019

Я пытаюсь отредактировать запрос для отчета, который уже был настроен для создания отчетов, однако я сталкиваюсь с некоторыми проблемами, пытаясь преобразовать столбец BigInt (USERID) в столбец Nvarchar (150) (FIRST_NAME) из другая таблица для одного конкретного изменения, которое мне нужно внести в запрос в целом.

Структура таблицы выглядит следующим образом (удалены некоторые ненужные столбцы, поскольку по существу единственными важными столбцами являются «USERID, REPORTINGTO)

Таблица A (SDU)

USERID  FIRSTNAME   LASTNAME    REPORTINGTO
28      Name 28     Surname 28  NULL
29      Name 29     Surname 29  36
30      Name 30     Surname 30  40
31      Name 31     Surname 31  53211
32      Name 32     Surname 32  40
33      Name 33     Surname 33  53211
34      Name 34     Surname 34  NULL
35      Name 35     Surname 35  40
36      Name 36     Surname 36  26

Таблица B (AAAUSER)

USER_ID FIRST_NAME
34  Name 34
35  Name 35
36  Name 36

В столбце REPORTINGTO указывается USERID, который ссылается на правильного менеджера, но не подходит для целей отчета; нам нужно отобразить «FIRST_NAME» из таблицы B. (first_name IS отличается от FirstName в таблице A)

select
    au.FIRST_NAME 'Tech'
    ,sdu.JOBTITLE 'Title'
    ,sdu.REPORTINGTO 'Manager'

from 

AaaUser au
    join HelpDeskCrew hdc on au.USER_ID = hdc.TECHNICIANID
    join SDUser sdu on au.USER_ID = sdu.USERID

Это выводит таблицу как

Tech        Title                       Manager
Full Name 1 Senior Technical Consultant 26
Full Name 2 Senior Technical Consultant 53211

Принимая во внимание, что я хочу, чтобы Диспетчер отображался как «FIRST_NAME» из Таблицы B; в отличие от «USERID», связанного с этим менеджером.

Любая помощь или толчок в правильном направлении будет принята с благодарностью. Кажется, что Cast / Convert - это то, что нужно, но пока я не смог ввести это с успехом.

1 Ответ

0 голосов
/ 14 мая 2019

Ничто не мешает вам присоединиться к одной и той же таблице дважды:

select
    sdi.USERID as TechID
    ,au.FIRST_NAME as TechName
    ,sdu.JOBTITLE as Title
    ,sdu.REPORTINGTO as ManagerID
    ,mu.FIRST_NAME as ManagerName
from 
    SDUser sdu
    INNER JOIN AaaUser au on au.USER_ID = sdu.USERID
    LEFT OUTER JOIN AaaUser mu on mu.USER_ID = sdu.REPORTINGTO

Советы:

  • Я удалил helpdeskcrew, поскольку вы, похоже, не использовали его, ия не хотел дополнительного визуального беспорядка таблицы, которая не была определена - не стесняйтесь добавлять ее обратно в
  • Иногда идентификатор менеджера в sdu равен нулю, поэтому при присоединении таблицы Aaauser для имени менеджера его необходимо оставить присоединеннымв противном случае эти строки исчезнут
  • Не используйте 'вокруг псевдонимов столбцов.В SQL «предназначен для строк, а» (или ничего) для идентификаторов
  • Вы можете объединять таблицу в запросе столько раз, сколько хотите, и, действительно, следует, если основная таблица ссылается на эту таблицупо разным причинам
  • Вы должны присоединиться к нему несколько раз по разным причинам, вы не можете ИЛИ один раз использовать таблицу. Присоединитесь к ней несколько раз и присвойте каждой таблице псевдоним, который описывает цель - здесь яиспользовал au для обычного пользователя (потому что вы это сделали) и mu для «manageuser» - т.е. менеджера, который управляет пользователем
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...