转换BIGINT以显示为Nvarchar列

时间:2019-05-14 10:25:05

标签: sql casting type-conversion ssrs-2012

我正在尝试编辑针对已设置为报告的报告的查询,但是在尝试将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,该USERID引用了正确的管理器,但不适用于报告目的;我们需要显示表B中的“ FIRST_NAME”。(名字与表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

我希望Manager在表B中显示为“ FIRST_NAME”;而不是与该Manager关联的“ USERID”。

任何对正确方向的帮助或推动将不胜感激。似乎Cast / Convert是要走的路,但是到目前为止,我一直无法成功输入。

1 个答案:

答案 0 :(得分:0)

没有什么可以阻止您两次连接同一张表:

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中的经理ID为null,因此在将Aaauser表加入经理名称时,必须保持连接状态,否则这些行将消失
  • 不要在列名别名周围使用'。在SQL中,“是用于字符串,”(或什么都不是)用于标识符
  • 如果主表出于多种不同原因引用该表,则您可以根据需要将一个表连接到查询中多次,实际上您应该这样做。
  • 由于不同的原因,您必须多次加入它;您不能对该表进行“或”操作。多次连接它,并为每个表提供一个描述目的的别名-在这里,我将au用作普通用户(因为您这样做了),将mu用作“ managinguser”(即管理用户的经理)用户