如何在SQL结果中显示表名作为列名的前缀

时间:2018-12-27 15:55:47

标签: sql sql-server

两个表。一些重叠的字段名。加入查询。同一列名称出现两次。我想将表名作为列名的前缀添加,以使其更易于阅读。我正在使用通配符*,我想继续在解决方案中使用通配符。

查询可能是这样的:

SELECT *
FROM Loan l JOIN
     LoanInstallment li
     ON l.LoanId = li.LoanId

结果的归档名称可能是这样的:

LoanID | Amount | Date | LoanID | Amount | Date |
… records

我想去哪里

l.LoanID | l.Amount | l.Date | li.LoanID | li.Amount | li.Date |
… records

这应该很容易做到,因为很明显SQL的字段名相同没有问题,因此每列都有一个不可见的表名。

如何显示表名作为列名的前缀?

冬至

3 个答案:

答案 0 :(得分:1)

所需的名称不是默认名称,因此您需要显式设置它们。另外,这些不是“标准”,因此需要进行转义。列的转义符因数据库而异,但是大多数数据库都支持标准双引号。

所以:

SELECT l.LoanID as "l.LoanID",
       l.Amount as "l.Amount",
       l.Date as "l.Date",
       li.LoanID as "li.LoanID",  -- totally unnecessary because it is the same as l.LoanId
       li.Amount as "li.Amount",
       li.Date as "li.Date"
FROM Loan l JOIN
     LoanInstallment li
     ON l.LoanId = li.LoanId;

SQL Server传统上使用方括号([]')而不是双引号来转义标识符,但它也支持标识符。

答案 1 :(得分:0)

您可以使用下面的查询获取用逗号分隔的字段列表,然后将其复制并粘贴到查询中:

SELECT T.Name as Table_Name, 
    'L.'+C.Name+' AS ''L.'+C.Name+''', ' as Column_Name,
    'LI.'+C.Name+' AS ''LI.'+C.Name+''', ' as Column_Name
FROM sysobjects T 
INNER JOIN syscolumns C
  ON T.ID = C.ID
WHERE T.Name LIKE '%Airlines%';

Tips 4 DBs

下有关数据字典用法的更多技巧

答案 2 :(得分:0)

使用以下查询在一行中获取列名。

DECLARE @allcolname NVARCHAR(MAX)='';

SELECT @allcolname = @allcolname + 'L.' + C.Name +' AS ''L.'+C.Name+''', '
FROM sysobjects T 
INNER JOIN syscolumns C ON T.ID = C.ID
WHERE T.Name ='Users'; 

SELECT @allcolname