`

sql 行转列 例子

 
阅读更多
一.
在行转列时,拼结多个问题的答案,放到一个列中显示

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行转列,与列转行

    sql 行转列 与列转行,oracle ,msssql等,详细数据库操作方法,各种例子,欢迎大家学习。、~

    SqlServer行转列

    ### SqlServer行转列 #### 知识点一:什么是行转列? 在数据库操作中,行转列(Pivot)是一种将数据表中的行数据转换为列数据的技术。这种技术通常用于改变数据的结构,使得原始数据更适合进一步的数据分析或报告...

    sql行转列动态与静态

    在SQL中,将数据从行转换为列的操作称为“行转列”。这一操作在实际业务场景中非常常见,比如在报表生成、数据分析等场景下,往往需要将原本纵向排列的数据转化为横向显示,以便于分析或者展示。根据题目提供的信息...

    Mysql 行转列,列转行 SQL语句和示例表结构SQL

    MySQL 虽然没有内置的行转列和列转行函数,但通过 CASE、GROUP_CONCAT、UNION ALL 和 JOIN 等 SQL 语句,我们可以灵活地对数据进行转换,满足不同的数据分析需求。在实际应用中,应根据数据的特性和业务需求选择合适...

    SQL Server行转列使用

    T-SQL(Transact-SQL)是微软SQL Server所使用的扩展SQL语言,它提供了丰富的数据处理功能,包括行转列。在SQL Server中,有两种主要的方法可以实现这一转换: 1. 使用CASE语句: CASE语句是SQL中一个非常强大的...

    java行转列的例子

    "java行转列"这个主题是数据处理中的一个常见需求,尤其是在数据分析、报表生成或数据显示时。当我们从数据库中获取数据,有时会遇到单个字段的数据需要在用户界面上以列的形式展示,这时就需要进行数据的行列转换。...

    sql行转列合并GrideView单元格 实现类似Excel效果

    可能包含使用Pivot的例子,或者是在特定场景下如何实现行转列的代码片段。 6. **文件"web"**:这个文件可能是一个Web项目的部分,包含HTML、CSS、JavaScript代码,或者是与GrideView相关的配置文件。可能涉及到如何...

    SQL中如何实现行转列.rar

    在SQL(结构化查询语言)中,行转列是一种常见的数据转换操作,它将数据库表中的多行数据转换为单列或多列显示。这在数据分析、报表制作或数据展示时非常有用。本教程将深入探讨如何在SQL中实现这一功能。 首先,...

    Sql Server 2005 行转列的实现 (横排)

    在SQL Server 2005中,我们经常遇到这样的需求:需要将数据库中的多行数据转换为多列显示,这通常被称为“行转列”或“行列互换”。这种操作在数据分析、报表制作或者简化数据显示时非常有用。本文将详细讲解如何在...

    SQL行转列范例教程

    ### SQL行转列知识点详解 #### 一、背景与需求 在数据分析领域,经常会遇到需要将数据表中的行转换为列的情况,这种操作通常被称为“行转列”或“纵转横”。例如,在处理销售数据时,可能需要将不同产品的销售额从...

    sqlserver 把行转成列

    在提供的"行转列.sql"文件中,可能包含了具体的行转列操作示例。通过分析这个文件,你可以更直观地学习如何在SQL Server中进行行转列操作。请打开文件查看具体代码,并根据实际情况调整和使用。

    sql动态行转列的两种方法

    在SQL中,行转列是一种常见的数据转换操作,它能够将多行数据转换为单行数据,便于数据分析和展示。本文将详细介绍两种SQL动态行转列的方法,适用于处理具有多种分类或时间序列的数据。 **方法一:使用PIVOT函数** ...

    Oracle行转列之pivot

    在Oracle数据库中,行转列(也称为数据透视)和列转行(unpivot)是SQL查询中用于数据转换的高级功能。从Oracle 11g版本开始,引入了PIVOT和UNPIVOT关键字,以支持显式的查询转换,即从行数据转换为列数据,或从列...

    SQL Server行转列的方法解析

    在SQL Server中,行转列是一种常见的数据转换需求,它将数据库中的行数据转换为列显示,以便于分析和报表制作。以下是对SQL Server行转列方法的详细解析。 首先,我们可以使用SQL Server的`PIVOT`操作来实现行转列...

    SQL 通过行动态生成列

    在提供的`row2coulmn0.sql`文件中,可能包含了一个具体的行转列的例子或者是一种实现方式。具体的内容需要查看文件才能详细解读。理解并掌握这些方法,将有助于你处理各种复杂的数据展示需求,特别是在生成动态报表...

    Sql_Servcer行转列及列转行说明.docx

    行转列,即把数据库中的一行数据转换为多列显示,反之列转行则是将多列数据合并成一行。这里主要介绍的是使用`PIVOT`和`UNPIVOT`操作来实现这一目标。 `PIVOT`是SQL Server提供的一种关系运算符,它允许我们将一个...

    sql语句实现行转列的3种方法实例

    本文将详细介绍SQL语句中实现行转列的三种方法,帮助你在处理数据时更加灵活。 1. 静态行转列 静态行转列通常适用于列名已知且固定的情况。这种方法利用`CASE`语句配合`SUM`函数来完成转换。在给出的例子中,我们...

    C# DataTable行转列

    C# DataTable行转列 可能从数据库读出来的数据需要转换下行列来显示、在SQL里转换占用SQL资源 放在界面用C#转换可能更好 这是个简单的例子 原来显示: 年级 班级 人数 转换为: 年级 一班 二班 三班 合计

Global site tag (gtag.js) - Google Analytics