【问题标题】:How to create a detailed report from SQL query如何从 SQL 查询创建详细报告
【发布时间】:2018-09-21 13:29:52
【问题描述】:

我有一个如下所示的查询:

SELECT 
a.Name as 'Name of the program',
a.ContractCode as Code,
case 
when a.IsActive = 1 THEN 'YES'
when a.IsActive = 0 THEN 'NO'
end as ACTIVE,
a.StartDate as 'Contract  Start Date',
a.EndDate as 'Contract  End Date',
case 
when a.Description IS NULL THEN ''
else a.Description 
End as 'Description',
b.Name as 'Service provider’s name',
a.CountryISO2 as 'Country',
c.DisplayName as 'Default Language'

FROM [Config].[Contract] a
join [dbo].[ServiceProvider] b on a.ServiceProviderID = b.ServiceProviderID
join [Config].[Languages] c on a.LanguageId = c.Id

我需要将每一行转换为如下所示的详细报告:

来自:

Name Program|Code|ACTIVE|Contract  Start Date|Contract  End Date |Description|Service provider’s name|Country |Default Language

收件人:

Name Program: 
Code:
ACTIVE:
Contract  Start Date:
Contract  End Date:
Description:
Service provider’s name:
Country:
Default Language:

如何在 SQL/T-SQL 中转换它?

【问题讨论】:

  • 详细报告是什么意思? SQL Server Reporting Services 中有什么东西?您描述的文本的电子邮件?您正在编写的网页从您的数据库中读取?还有什么?尽可能扩展您的需求:)
  • 您的意思是要垂直显示列,然后再垂直显示下一条记录? SQL 不是为演示工作而设计的。相反,您会使用其他工具。 SQL Server 具有 Reporting Services 功能,或者您可以使用其他一些报告构建工具(市场上有很多)或制作自定义应用程序来呈现您的数据(例如,在网页或 Excel 工作表或 PDF 中)。客户端应用程序(SSRS、自定义应用程序或其他工具,如 Crystal Reports)将运行 SQL 查询,获取结果,然后将其格式化为所需的演示样式。
  • @MatBailie 它甚至可以是 csv/文本文件。我只需要一个从上到下的报告——而不是在列中
  • @KacperG 您想要的输出不适合 CSV,它是为行/列中的表格数据设计的(很像 SQL 查询的标准输出),以便以机器可读的方式传输数据格式。您想要的格式看起来像是设计为人类可读的。纯文本文件会更合理,但无论你做什么,你都不能只用 SQL 来做。正如我提到的,您需要一些外部代码。
  • 您似乎只是在问如何从 SQL 查询中提取表格数据?

标签: sql tsql sql-server-2008


【解决方案1】:

如果您想将其作为单个字符串,只需将所有内容连接起来,中间加上换行符?

SELECT 
  CONCAT(
    'Name of the program : ', a.name, CHAR(13), CHAR(10),
    'Code : ', a.ContractCode, CHAR(13), CHAR(10),
    'Active : ', case a.IsActive when 1 THEN 'YES' when 0 then 'NO' end, CHAR(13), CHAR(10),
    etc, etc
  )
    AS report_string
FROM [Config].[Contract] a
join [dbo].[ServiceProvider] b on a.ServiceProviderID = b.ServiceProviderID
join [Config].[Languages] c on a.LanguageId = c.Id

【讨论】:

  • 嗯,然后确保所有内容都是字符串类型(使用CAST(),然后将所有内容与+连接起来?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-12
  • 2011-11-30
  • 1970-01-01
相关资源
最近更新 更多