SQL查询一个表中根据其中一个列的属性来拼接多个列并SELECT INTO 新表显示

2023-11-12


--将同一个表中 不同[Group]属性的添加列分成一整行
SELECT * INTO VP_Temp FROM 
(
    SELECT DISTINCT A.ID,A.TypeName,A.ItemType,A.isBad,
    A.sNo sNo1,A.CheckItem CheckItem1,A.BadValue BadValue1,A.[Group] Group1,
    B.sNo sNo2,B.CheckItem CheckItem2,B.BadValue BadValue2,B.[Group] Group2,
    C.sNo sNo3,C.CheckItem CheckItem3,C.BadValue BadValue3,C.[Group] Group3,
    D.sNo sNo4,D.CheckItem CheckItem4,D.BadValue BadValue4,D.[Group] Group4
    FROM 
    (SELECT ROW_NUMBER() over(Order by sNo ASC) ID,* FROM Print_Temp WHERE [Group]=1) A
    LEFT OUTER JOIN 
    (SELECT ROW_NUMBER() over(Order by sNo ASC) ID,* FROM Print_Temp WHERE [Group]=2) B
    ON A.ID=B.ID AND A.TypeName=B.TypeName AND A.ItemType=B.ItemType AND A.isBad=B.isBad
    LEFT OUTER JOIN 
    (SELECT ROW_NUMBER() over(Order by sNo ASC) ID,* FROM Print_Temp WHERE [Group]=3) C
    ON B.ID=C.ID AND B.TypeName=C.TypeName AND B.ItemType=C.ItemType AND B.isBad=C.isBad
    LEFT OUTER JOIN 
    (SELECT ROW_NUMBER() over(Order by sNo ASC) ID,* FROM Print_Temp WHERE [Group]=4) D
    ON C.ID=D.ID AND C.TypeName=D.TypeName AND C.ItemType=D.ItemType AND C.isBad=D.isBad
)TAB

--每四个一组
序号    值        组属性
1        妲己    1
2        后羿    2
3        鲁班    3
4        狄仁杰    4
5        甄姬    1
6        安琪拉    2
7        亚瑟    3
8        小乔    4
9        周瑜    1
10        孙尚香    2

--先补足相同的数量    利用存储过程
序号    值        组属性
1        妲己    1
2        后羿    2
3        鲁班    3
4        狄仁杰    4
5        甄姬    1
6        安琪拉    2
7        亚瑟    3
8        小乔    4
9        周瑜    1
10        孙尚香    2
11        null    3        --能被4整除的
12        null    4        --能被4整除的

然后变成
--其中rn为rownumber()

rn        序号    值        组属性      序号       值      组属性    序号    值        组属性    序号    值        组属性
1        1        妲己            1            2        后羿      2             3        甄姬       3          4        鲁班         4
2        5        狄仁杰        1            6        庄周       2            7        孙膑       3           8        赵云        4
3        9        宫本           1            10        张飞       2          11       关羽       3          12        项羽        4
4        13        虞姬          1            14        NULL      2          15     NULL     3          16        NULL      4

 

 

 

 

 

附上我的存储过程


--------------------------------原物料验货单打印------------------------------------------------------- 
IF EXISTS (SELECT name FROM sysobjects  
   WHERE name = 'up_PrintCheckMaterial' AND type = 'P') 
   DROP PROCEDURE up_PrintCheckMaterial  
GO  
 
CREATE PROCEDURE up_PrintCheckMaterial   
    @CheckNo     varchar(100),    --单号  
    @SourceType    varchar(20),    --来源单号
    @Category    varchar(100),    --检验类别 
    @ItemType    varchar(100)    --检验大类
WITH ENCRYPTION       
AS  
    --CREATE TEMP TABLE  Print_Temp
    IF(OBJECT_ID('Print_Temp') IS NOT NULL) DROP TABLE Print_Temp --DELETE TABLE
    SELECT DISTINCT 
    ROW_NUMBER() over(Order by B.ItemType  ASC) sNo,
    C.TypeName,B.ItemType,A.CheckItem,C.isBad,B.BadValue,'' [Group] 
    INTO Print_Temp
    FROM QCCheckItem A 
    LEFT OUTER JOIN CheckDetail B ON A.COMPANYCODE=B.COMPANYCODE AND A.ITEMTYPE=B.ITEMTYPE
    LEFT OUTER JOIN QCItemType C ON A.ITEMTYPE=C.ITEMTYPE
    WHERE B.CHECKNO=@CheckNo AND B.SOURCETYPE=@SourceType AND A.SEQ=B.CHECKITEMSEQ
    AND B.ItemType IN 
    (SELECT ItemType FROM QCCheckCategoryType
    WHERE Category=@Category) AND B.ItemType=@ItemType
    
    DECLARE @Length INT
    SELECT @Length=COUNT(sNo) FROM Print_Temp
    IF(@Length=0)
    BEGIN
        SELECT ''ID,''TypeName,''ItemType,''isBad,
        ''sNo1,''CheckItem1,''BadValue1,''Group1,
        ''sNo2,''CheckItem2,''BadValue2,''Group2,
        ''sNo3,''CheckItem3,''BadValue3,''Group3,
        ''sNo4,''CheckItem4,''BadValue4,''Group4
    END ELSE BEGIN
        --游标 修改组属性
        DECLARE @id INT =1   
        DECLARE @currentNum int =1
        DECLARE tmp_Print_cursor CURSOR                 
        FOR
            SELECT sNo FROM Print_Temp
        OPEN tmp_Print_cursor                                
        FETCH   tmp_Print_cursor INTO @id    
        WHILE ( @@fetch_status = 0 )            
            BEGIN
                UPDATE Print_Temp set [Group]=@currentNum where sNo =@id
                set @currentNum+=1
                if @currentNum>4
                begin
                  set  @currentNum=1
                end 
                FETCH  tmp_Print_cursor INTO @id
            END
        CLOSE tmp_Print_cursor 
        DEALLOCATE tmp_Print_cursor
        --找数据
        DECLARE @TypeName VARCHAR(100)
        DECLARE @isBad BIT
        SELECT @TypeName=TypeName,@isBad=isBad FROM QCItemType WHERE ItemType=@ItemType
        --补数据        2
        DECLARE @COUNT2 INT
        SELECT @COUNT2=COUNT(*) FROM Print_Temp WHERE [GROUP]=1
        DECLARE @ROW2 INT
        SELECT @ROW2=COUNT(*) FROM Print_Temp WHERE [GROUP]=2
        IF(@COUNT2=@ROW2)
        BEGIN
            EXEC up_PrintCheckMaterial @CheckNo,@SourceType,@Category,@ItemType
        END
        ELSE BEGIN
            WHILE @ROW2<@COUNT2
            BEGIN
                INSERT INTO Print_Temp VALUES((SELECT MAX(sNo)+1 FROM Print_Temp),@TypeName,@ItemType,NULL,@isBad,NULL,2)
                SELECT @ROW2=@ROW2+1
            END
        END
        --补数据        3
        DECLARE @COUNT3 INT
        SELECT @COUNT3=COUNT(*) FROM Print_Temp WHERE [GROUP]=1
        DECLARE @ROW3 INT
        SELECT @ROW3=COUNT(*) FROM Print_Temp WHERE [GROUP]=3
        IF(@COUNT3=@ROW3)
        BEGIN
            EXEC up_PrintCheckMaterial @CheckNo,@SourceType,@Category,@ItemType
        END
        ELSE BEGIN
            WHILE @ROW3<@COUNT3
            BEGIN
                INSERT INTO Print_Temp VALUES((SELECT MAX(sNo)+1 FROM Print_Temp),@TypeName,@ItemType,NULL,@isBad,NULL,3)
                SELECT @ROW3=@ROW3+1
            END
        END
        --补数据        4
        DECLARE @COUNT4 INT
        SELECT @COUNT4=COUNT(*) FROM Print_Temp WHERE [GROUP]=1
        DECLARE @ROW4 INT
        SELECT @ROW4=COUNT(*) FROM Print_Temp WHERE [GROUP]=4
        IF(@COUNT4=@ROW4)
        BEGIN
            EXEC up_PrintCheckMaterial @CheckNo,@SourceType,@Category,@ItemType
        END
        ELSE BEGIN
            WHILE @ROW4<@COUNT4
            BEGIN
                INSERT INTO Print_Temp VALUES((SELECT MAX(sNo)+1 FROM Print_Temp),@TypeName,@ItemType,NULL,@isBad,NULL,4)
                SELECT @ROW4=@ROW4+1
            END
        END
        --SELECT * FROM Print_Temp ORDER BY [GROUP],sNo--WHERE [Group]=@Group
        --数据合并成一行 CREATE TEMP2 TABLE VP_Temp
        IF(OBJECT_ID('VP_Temp') IS NOT NULL) DROP TABLE VP_Temp--DELETE TABLE
        SELECT * INTO VP_Temp FROM 
        (
            SELECT DISTINCT A.ID,A.TypeName,A.ItemType,A.isBad,
            A.sNo sNo1,A.CheckItem CheckItem1,A.BadValue BadValue1,A.[Group] Group1,
            B.sNo sNo2,B.CheckItem CheckItem2,B.BadValue BadValue2,B.[Group] Group2,
            C.sNo sNo3,C.CheckItem CheckItem3,C.BadValue BadValue3,C.[Group] Group3,
            D.sNo sNo4,D.CheckItem CheckItem4,D.BadValue BadValue4,D.[Group] Group4
            FROM 
            (SELECT ROW_NUMBER() over(Order by sNo ASC) ID,* FROM Print_Temp WHERE [Group]=1) A
            LEFT OUTER JOIN 
            (SELECT ROW_NUMBER() over(Order by sNo ASC) ID,* FROM Print_Temp WHERE [Group]=2) B
            ON A.ID=B.ID AND A.TypeName=B.TypeName AND A.ItemType=B.ItemType AND A.isBad=B.isBad
            LEFT OUTER JOIN 
            (SELECT ROW_NUMBER() over(Order by sNo ASC) ID,* FROM Print_Temp WHERE [Group]=3) C
            ON B.ID=C.ID AND B.TypeName=C.TypeName AND B.ItemType=C.ItemType AND B.isBad=C.isBad
            LEFT OUTER JOIN 
            (SELECT ROW_NUMBER() over(Order by sNo ASC) ID,* FROM Print_Temp WHERE [Group]=4) D
            ON C.ID=D.ID AND C.TypeName=D.TypeName AND C.ItemType=D.ItemType AND C.isBad=D.isBad
        )TAB

        SELECT * FROM VP_Temp ORDER BY ID
    END
    
GO  


EXEC up_PrintCheckMaterial '19071200801','DR','A01','c001'
EXEC up_PrintCheckMaterial '19071200801','DR','A01','C10086'

 

数据前:

SELECT INTO后:

 


 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL查询一个表中根据其中一个列的属性来拼接多个列并SELECT INTO 新表显示 的相关文章

  • Visual Studio 2008 (C#) 与 SQL Compact Edition 数据库错误:26

    与网络相关或特定于实例的 建立时发生错误 连接到 SQL Server 服务器 未找到或无法访问 验证实例名称是否为 正确并且 SQL Server 是 配置为允许远程 连接 提供商 SQL 网络 接口 错误 26 错误定位 指定服务器 实
  • 如何将数据插入 Microsoft Access 数据库?

    我正在尝试将数据插入 Microsoft Access 数据库 我将数据插入到 Access 数据库中 但只有第一次和第二次显示我插入的数据 当我重建应用程序时 我插入的数据消失了 我不知道他们去了哪里并且没有出现 我使用 C 和 NET
  • SQL日期格式转换? [dd.mm.yy 至 YYYY-MM-DD]

    是否有 mySQL 函数可以将日期从 dd mm yy 格式转换为 YYYY MM DD 例如 03 09 13 gt 2013 09 03 由于您的输入是表单中的字符串03 09 13 我假设 因为今天是 2013 年 9 月 3 日 d
  • 获取MySql中重复行的列表

    我有一张这样的桌子 ID nachname vorname 1 john doe 2 john doe 3 jim doe 4 Michael Knight 我需要一个查询 该查询将从具有相同 nachname 和 vorname 的记录
  • 选择不带 FROM 但有多于一行的选择

    如何在不从现有表中进行选择的情况下生成 2 行 2 列的表 我正在寻找的是一个返回的选择语句 e g id value 1 103 2 556 Use UNION http dev mysql com doc refman 5 0 en u
  • 如何在一列中存储数组或多个值

    运行 Postgres 7 4 是的 我们正在升级 我需要将 1 到 100 个选定项目存储到数据库的一个字段中 98 的情况下 只会输入 1 个项目 而 2 的情况下 如果是这样的话 会输入多个项目 这些项目只不过是文本描述 截至目前 长
  • oracle日期序列?

    我有一个 oracle 数据库 我需要一个包含 2 年所有日期的表 例如来自01 01 2011 to 01 01 2013 首先我想到了一个序列 但显然唯一支持的类型是数字 所以现在我正在寻找一种有效的方法来做到这一点 欢呼骗局 如果您想
  • SQL Server、ISABOUT、加权项

    我试图弄清楚加权项在 SQL SERVER 的 ISABOUT 查询中是如何工作的 这是我目前所在的位置 每个查询返回以下行 查询 1 权重 1 初始排名 SELECT FROM CONTAINSTABLE documentParts ti
  • 一组记录中某些值相同的唯一约束

    DBMS MS Sql Server 2005 标准版 我想创建一个表约束 以便只有一个记录在表的子集中具有特定值 其中行共享特定列中的值 这可能吗 Example 我的 myTable 中有一些记录 其中有一个非唯一的外键 fk1 以及一
  • 仅使用 SQL 中的 MAX 函数更新重复行

    我有一张这样的桌子 假设为了举例 NAME是一个唯一的标识符 NAME AGE VALUE Jack Under 65 3 Jack 66 74 5 John 66 74 7 John Over 75 9 Gill 25 35 11 Som
  • 在 Oracle 中创建数据库链接时出错

    我有两个数据库 需要编写跨数据库查询 所以我试图创建一个数据库链接 CREATE PUBLIC DATABASE LINK DBLink CONNECT TO SchemaName IDENTIFIED BY 123 using DBNam
  • 动态/条件 SQL 连接?

    我在 MSSQL 表 TableB 中有数据 其中 dbo tableB myColumn 在特定日期后更改格式 我正在做一个简单的连接到该表 Select dbo tableB theColumnINeed from dbo tableA
  • PIVOT 运算符中指定的列名“FirstName”与 PIVOT 参数中的现有列名冲突

    当我尝试替换时收到以下错误消息null to zero PIVOT 运算符中指定的列名 jan 与 PIVOT 参数中的现有列名称 查询如下 select from select isnull jan 0 isnull feb 0 sum
  • 从Oracle表中删除重复行

    我正在 Oracle 中测试某些内容并使用一些示例数据填充表 但在此过程中我不小心加载了重复记录 因此现在我无法使用某些列创建主键 如何删除所有重复行并只保留其中一行 Use the rowid伪列 DELETE FROM your tab
  • 出于安全目的,您是否有理由不执行自己的算法来打乱 ID?

    我计划实现我自己的非常简单的 哈希 公式 为具有多个用户的应用程序添加一层安全性 我目前的计划如下 用户创建一个帐户 此时后端会生成一个 ID ID 通过公式运行 假设 ID 57 8926 36 7 或同样随机的东西 然后 我将新的用户
  • 产品和变体 - 设计数据库的最佳方法

    描述 商店可以有产品 鞋子 T 恤等 每个产品可以有许多变体 每个变体可以有不同的价格和库存 例如T 恤有不同的颜色和尺寸 颜色 蓝色 尺寸 L 价格 10 美元 库存 5 颜色 蓝色 尺寸 XL 价格 10 美元 库存 10 颜色 白色
  • 如何在数据库中对 (Java) 枚举进行建模(使用 SQL92)

    您好 我正在使用名为 性别 的列对实体进行建模 在应用程序代码中 性别应该是一个 Java 枚举类型 有 2 个值 男性和女性 知道作为数据类型的枚举不是通用 SQL 语言 92 的一部分 您将如何建模它 数据模型必须是可移植的 以便由多个
  • 如何查询多对多表(一个表的值成为列标题)

    给定此表结构 我想展平多对多关系 并将一个表的名称字段中的值设置为列标题 并将同一表中的数量设置为列值 目前可行的想法是将值放入字典 哈希表 中并用代码表示这些数据 但我想知道是否有 SQL 方法可以做到这一点 我还使用 Linq to S
  • 无法将方法组“Read”转换为非委托类型“bool”

    我正在尝试使用SqlDataReader检查条目是否存在 如果存在则返回ID 否则返回false 当我尝试编译时 出现错误 无法将方法组 Read 转换为非委托类型 bool 我一直在遵循在 VB 中找到的示例 但似乎翻译可能不正确 pri
  • 如果不存在则插入数据(来自 2 个表),否则更新

    再会 我有3张桌子 tbl仓库产品 ProductID ProductName ProductCode Quantity tbl分公司产品 ProductID ProductCode ProductCode Quantity Locatio

随机推荐

  • Spring 事件处理机制

    spring 事件处理机制 Spring框架对事件的发布与监听提供了相对完整的支持 它扩展了JDK中对自定义事件监听提供的基础框架 并与Spring的IOC特性作了整合 使得用户可以根据自己的业务特点进行相关的自定义 并依托Spring容器
  • 1、picodet模型全流程-VOC格式数据准备模型训练验证导出推理

    文章目录 1 环境准备 2 数据准备 2 1 清理检查数据集 2 2 划分训练和验证集 2 3 获取标注类别 2 4 整合所有文件的训练 验证及训练名称 3 开始模型训练 3 1 准备数据配置文件 3 2 对运行时文件进行修改 3 3 模型
  • CGAL例程:地理信息系统----点云数据生成DSM、DTM、等高线和数据分类

    作者 西蒙 吉罗多 链接 CGAL 5 4 Manual GIS Geographic Information System 目录 1 概述 2 不规则三角形网数据表示 TIN 3 数字表面模型表示 DSM 4 数字地形模型表示 DTM 4
  • 图像语义分割论文(二)DFANet

    DFANet Deep Feature Aggregation for Real Time Semantic Segmentation 总结 精度不错 实时性也好 有必要试试CPU的运行速度 技巧 多分支 目前实时语义分割主要包含三种思路
  • Converting Phase Noise to Random Jitter(TIE)

    该篇介绍了相位噪声 Phase Noise 和帕塞瓦尔定理 Parseval s theorem 推导了Phase Noise to Time Jitter rms 的转换过程 以及用ADI芯片demo的Phase Noise估算Jitte
  • OSI七层与TCP\IP协议

    本文为个人记录 记录于2022 10 31 目录 一 什么是OSI七层模型 二 什么是TCP IP协议 1 TCP IP常用协议 2 数据封装和解封装过程 分层思想 为什么要分层 将复杂的流程分解为几个功能相对单一的子过程 整个流程更加清晰
  • postgresql怎样查看数据库是否处于主从结构

    执行以下命令 ps aux grep postgres 如出现postgres wal receiver process说明此节点的数据库处于从服务器状态 无法进行修改
  • 2020——奇安信技术支持笔试题摘要

    1 常见应用层协议端口号 TCP和UDP使用IP协议从一个网络传送数据包到另一个网络 把IP想像成一种高速公路 它允许其它协议在上面行驶并找到到其它电脑的出口 TCP和UDP是高速公路上的 卡车 它们携带的货物就是像HTTP 文件传输协议F
  • 超级好用的一些网站

    免费在线工具网站 功能 地址 免费在线音频编辑 https mp3cut net cn 免费pdf翻译 https www deepl com translator files 免费pdf转word pdf转word 免费音乐下载 http
  • 制作基于XKT-510和T3168芯片的无线供电模块

    制作基于XKT 510和T3168芯片的无线供电模块 制作无线供电模块 进展记录更新 简书上更新比较快 链接 2017年9月6日 19 27 56 还是简书的Markdown编辑器好用啊可以直接粘贴图片不用一张张上传所以先发布在这了再搬到c
  • vscode 画流程图

    文章目录 1 安装插件 draw 2 新建文件 3 开始画图 4 另存为图片 vscode可以画流程图了 只需要安装插件就可以了 1 安装插件 draw 2 新建文件 3 开始画图 4 另存为图片
  • js声明函数(function)和变量(variable)不得不防的坑

    在工作中初级程序员容易忽略的细节就是函数和变量的声明都存在提升 而且他们之间的提升是不同的 请看下面的演示 function funa console log funa 函数声明 function funb console log funb
  • ChatGPT + MindShow搞定PPT制作

    一 获取PPT内容大概 1 进入chatgpt 官网 http chat openai com 账号密码登录 2 获取PPT内容 向他提问 提问格式如下 整理一份PPT大纲 主题是 如何使用热门AI工具 回答内容采用Markdown的形式
  • 【简单又有趣】Python五个迷你小项目,即学即用,还不赶紧码住(附源码)

    目录 前言 一 猜数字游戏 二 骰子模拟器 三 故事生成器 四 自动发送邮件 五 Hangman 总结 前言 Python编程语言中 我最喜欢的就是Python的各种第三方库 能够完成很多操作 下面就给大家介绍5个通过Python构建的项目
  • 2013年11月26日星期二(四元数)

    这一节 应该是个一点点进行 QUAT q1 0 0 0 0 先看下QUAT数据类型 四元数 typedef struct QUAT TYP union float M 4 struct float q0 VECTOR3D qv struct
  • 若依前后端分离代码生成

    去代码生成器界面 点击导入按钮 选择你想生成的数据库表 选择好之后 生成 会下载一个文件夹 包括SQL 前端代码和后端代码 只需要放到相应文件夹下面就可以了 vue是前端代码 放到ruoyi ui文件中 main是后端代码 那些mapper
  • vue.js鼠标移入变换样式,鼠标移出去除样式(active)实现方法

    鼠标移入添加class样式 HTML HTML绑定事件 加入或者移出class为active span class things 报事 span span class things 报修 span 注意这里v on不能直接省略为 我也不知道
  • Javascript数组与字典用法分析

    http www 68idc cn help makewebs javascript 20141214142024 html 这篇文章主要介绍了Javascript数组与字典用法 以实例形式较为详细的分析了Array作为数组与字典的不同用法
  • Chrome 扩展程序开发

    按chrome开发规范 我们首先建一个文件夹 如D AutoClickDemo 在该文件夹下新建一个名为manifest json的文本文件 并按实际情况放一个图片文件 作为插件的图标 然后新建一个名为myscript js的js脚本文件
  • SQL查询一个表中根据其中一个列的属性来拼接多个列并SELECT INTO 新表显示

    将同一个表中 不同 Group 属性的添加列分成一整行 SELECT INTO VP Temp FROM SELECT DISTINCT A ID A TypeName A ItemType A isBad A sNo sNo1 A Che