一.
在行转列时,拼结多个问题的答案,放到一个列中显示
Create FUNCTION [dbo].[AggregateString]
(
@func_code varchar(20),
@emp_id int,
@store_id int,
@BIZ_DATE varchar(20),
@acvt_id int,
@qst_id int ---问题id
)
RETURNS varchar(1024)
AS
BEGIN
declare @Str varchar(1024)
select @Str = isnull(@Str+',','')+val
from v_visit_acvt_for_fac
where qst_id = @qst_id
and func_code =@func_code
AND BIZ_DATE =@BIZ_DATE
AND STORE_ID =@store_id
and acvt_id=@acvt_id
and emp_id =@emp_id
return @Str
END
GO
二.行转列,关键是有一个固定的id值作为转运的id,如果没有这样的固定id,可以考虑用虚拟的列。生成固定的id值。
WITH acvt_qst
AS
(
SELECT maq.ACVT_ID,
maq.QST_ID,
mq.qst_name,
row_number() OVER(PARTITION BY maq.ACVT_ID ORDER BY maq.qst_id) rownum
FROM MS_ACVT_QST maq
INNER JOIN MS_QST mq
ON mq.id = maq.QST_ID
WHERE mq.qst_name <> '拍照' --AND maq.ACVT_ID = 18
)
SELECT v.emp_id,
v.STORE_ID,
v.BIZ_DATE,
v.IMG_ID,
v.FUNC_CODE,
v.acvt_id,
max(CASE WHEN qcq.rownum = 1 AND
v.qst_id = qcq.qst_id
THEN qcq.qst_name
ELSE NULL
END ) AS question1,
max(CASE WHEN qcq.rownum = 1 AND
v.qst_id = qcq.qst_id
THEN dbo.AggregateString(func_code,emp_id,store_id,biz_date,v.acvt_id,v.qst_id)
ELSE NULL
END ) AS answer1,
max(CASE WHEN qcq.rownum = 2 AND
v.qst_id = qcq.qst_id
THEN qcq.qst_name
ELSE NULL
END ) AS question2,
max(CASE WHEN qcq.rownum = 2 AND
v.qst_id = qcq.qst_id
THEN dbo.AggregateString(func_code,emp_id,store_id,biz_date,v.acvt_id,v.qst_id)
ELSE NULL
END ) AS answer2,
max(CASE WHEN qcq.rownum = 3 AND
v.qst_id = qcq.qst_id
THEN qcq.qst_name
ELSE NULL
END ) AS question3,
max(CASE WHEN qcq.rownum = 3 AND
v.qst_id = qcq.qst_id
THEN dbo.AggregateString(func_code,emp_id,store_id,biz_date,v.acvt_id,v.qst_id)
ELSE NULL
END ) AS answer3,
max(CASE WHEN qcq.rownum = 4 AND
v.qst_id = qcq.qst_id
THEN qcq.qst_name
ELSE NULL
END ) AS question4,
max(CASE WHEN qcq.rownum = 4 AND
v.qst_id = qcq.qst_id
THEN dbo.AggregateString(func_code,emp_id,store_id,biz_date,v.acvt_id,v.qst_id)
ELSE NULL
END ) AS answer4
FROM v_visit_acvt_temp v
INNER JOIN acvt_qst qcq
ON qcq.acvt_id = v.acvt_id
WHERE BIZ_DATE ='2012-03-01' AND func_code ='FAC_40'--AND STORE_ID =55140
GROUP BY v.emp_id,
v.STORE_ID,
v.BIZ_DATE,
v.IMG_ID,
v.FUNC_CODE,
v.acvt_id
分享到:
相关推荐
sql 行转列 与列转行,oracle ,msssql等,详细数据库操作方法,各种例子,欢迎大家学习。、~
### SqlServer行转列 #### 知识点一:什么是行转列? 在数据库操作中,行转列(Pivot)是一种将数据表中的行数据转换为列数据的技术。这种技术通常用于改变数据的结构,使得原始数据更适合进一步的数据分析或报告...
在SQL中,将数据从行转换为列的操作称为“行转列”。这一操作在实际业务场景中非常常见,比如在报表生成、数据分析等场景下,往往需要将原本纵向排列的数据转化为横向显示,以便于分析或者展示。根据题目提供的信息...
MySQL 虽然没有内置的行转列和列转行函数,但通过 CASE、GROUP_CONCAT、UNION ALL 和 JOIN 等 SQL 语句,我们可以灵活地对数据进行转换,满足不同的数据分析需求。在实际应用中,应根据数据的特性和业务需求选择合适...
T-SQL(Transact-SQL)是微软SQL Server所使用的扩展SQL语言,它提供了丰富的数据处理功能,包括行转列。在SQL Server中,有两种主要的方法可以实现这一转换: 1. 使用CASE语句: CASE语句是SQL中一个非常强大的...
"java行转列"这个主题是数据处理中的一个常见需求,尤其是在数据分析、报表生成或数据显示时。当我们从数据库中获取数据,有时会遇到单个字段的数据需要在用户界面上以列的形式展示,这时就需要进行数据的行列转换。...
可能包含使用Pivot的例子,或者是在特定场景下如何实现行转列的代码片段。 6. **文件"web"**:这个文件可能是一个Web项目的部分,包含HTML、CSS、JavaScript代码,或者是与GrideView相关的配置文件。可能涉及到如何...
在SQL(结构化查询语言)中,行转列是一种常见的数据转换操作,它将数据库表中的多行数据转换为单列或多列显示。这在数据分析、报表制作或数据展示时非常有用。本教程将深入探讨如何在SQL中实现这一功能。 首先,...
在SQL Server 2005中,我们经常遇到这样的需求:需要将数据库中的多行数据转换为多列显示,这通常被称为“行转列”或“行列互换”。这种操作在数据分析、报表制作或者简化数据显示时非常有用。本文将详细讲解如何在...
### SQL行转列知识点详解 #### 一、背景与需求 在数据分析领域,经常会遇到需要将数据表中的行转换为列的情况,这种操作通常被称为“行转列”或“纵转横”。例如,在处理销售数据时,可能需要将不同产品的销售额从...
在提供的"行转列.sql"文件中,可能包含了具体的行转列操作示例。通过分析这个文件,你可以更直观地学习如何在SQL Server中进行行转列操作。请打开文件查看具体代码,并根据实际情况调整和使用。
在SQL中,行转列是一种常见的数据转换操作,它能够将多行数据转换为单行数据,便于数据分析和展示。本文将详细介绍两种SQL动态行转列的方法,适用于处理具有多种分类或时间序列的数据。 **方法一:使用PIVOT函数** ...
在Oracle数据库中,行转列(也称为数据透视)和列转行(unpivot)是SQL查询中用于数据转换的高级功能。从Oracle 11g版本开始,引入了PIVOT和UNPIVOT关键字,以支持显式的查询转换,即从行数据转换为列数据,或从列...
在SQL Server中,行转列是一种常见的数据转换需求,它将数据库中的行数据转换为列显示,以便于分析和报表制作。以下是对SQL Server行转列方法的详细解析。 首先,我们可以使用SQL Server的`PIVOT`操作来实现行转列...
在提供的`row2coulmn0.sql`文件中,可能包含了一个具体的行转列的例子或者是一种实现方式。具体的内容需要查看文件才能详细解读。理解并掌握这些方法,将有助于你处理各种复杂的数据展示需求,特别是在生成动态报表...
行转列,即把数据库中的一行数据转换为多列显示,反之列转行则是将多列数据合并成一行。这里主要介绍的是使用`PIVOT`和`UNPIVOT`操作来实现这一目标。 `PIVOT`是SQL Server提供的一种关系运算符,它允许我们将一个...
本文将详细介绍SQL语句中实现行转列的三种方法,帮助你在处理数据时更加灵活。 1. 静态行转列 静态行转列通常适用于列名已知且固定的情况。这种方法利用`CASE`语句配合`SUM`函数来完成转换。在给出的例子中,我们...
C# DataTable行转列 可能从数据库读出来的数据需要转换下行列来显示、在SQL里转换占用SQL资源 放在界面用C#转换可能更好 这是个简单的例子 原来显示: 年级 班级 人数 转换为: 年级 一班 二班 三班 合计