Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 将单行拆分为多行-SQL Server Management Studio 2018_Sql Server_Tsql_Unpivot - Fatal编程技术网

Sql server 将单行拆分为多行-SQL Server Management Studio 2018

Sql server 将单行拆分为多行-SQL Server Management Studio 2018,sql-server,tsql,unpivot,Sql Server,Tsql,Unpivot,我试图将一行拆分为多行,但没有成功。任何帮助或提示都将不胜感激 表格结构 结果 您使用UNPIVOT。只需将柱强制转换为最大的类型并应用它。大概是这样的: DECLARE @DataSource TABLE ( [Dat_Cha_hOME_Away] VARCHAR(32) ,[Date] DATE ,[Half_Time_Score] VARCHAR(8) ,[Half Time_Goal Scored] CHAR(1) ,[Half Time_Goal Co

我试图将一行拆分为多行,但没有成功。任何帮助或提示都将不胜感激

表格结构

结果


您使用
UNPIVOT
。只需将柱强制转换为最大的类型并应用它。大概是这样的:

DECLARE @DataSource TABLE
(
    [Dat_Cha_hOME_Away] VARCHAR(32)
   ,[Date] DATE
   ,[Half_Time_Score] VARCHAR(8)
   ,[Half Time_Goal Scored] CHAR(1)
   ,[Half Time_Goal Conceded] CHAR(1)
   ,[Half_Time_Both Teams Scored] CHAR(1)
);

INSERT INTO @DataSource 
VALUES ('2019_...italy01', '2019-03-24', '0-1', 'N', 'Y', 'N')
      ,('2019_...italy02', '2019-03-24', '2-1', 'Y', 'Y', 'Y')
SELECT *
FROM 
(
    SELECT [Dat_Cha_hOME_Away]
          ,CONVERT(VARCHAR(10), [Date], 121) AS [Date]
          ,CAST([Half_Time_Score] AS VARCHAR(10)) AS [Half_Time_Score]
          ,CAST([Half Time_Goal Scored] AS VARCHAR(10)) AS [Half Time_Goal Scored]
          ,CAST([Half Time_Goal Conceded] AS VARCHAR(10)) AS [Half Time_Goal Conceded]
          ,CAST([Half_Time_Both Teams Scored] AS VARCHAR(10)) AS [Half_Time_Both Teams Scored]
    FROM @DataSource
) DS
UNPIVOT
(
    [value] FOR [column] IN ([Date], [Half_Time_Score], [Half Time_Goal Scored], [Half Time_Goal Conceded], [Half_Time_Both Teams Scored])
) UNPVT;

基于@gotqn-answer,我成功地创建了自己的一个,获得了理想的结果。非常感谢那些提供有用指导和提示的人

INSERT INTO Ins_Match_Details
SELECT
       [Dat_Cha_Team] + '_' + Results_Type AS [Dat_Cha_Team_Res Typ]
     , [Date]
     , [Championship]
     , [Dat_Cha_Hom_Vs_Away]
     , [Team]
     , [Site]
     , CAST(Results_Type AS NVARCHAR(20))
     , CAST(Results_Value AS NVARCHAR(10))
from
       (
              SELECT
                     [Dat_Cha_Team]
                   , [Dat_Cha_Hom_Vs_Away]
                   , [Date]
                   , [Championship]
                   , [Team]
                   , [Site]
                   , [Half Time Score]
                   , CAST([Half Time_Goal Scored] AS NVARCHAR(180)) AS [Half Time_Goal Scored]
                   , CAST([Half Time_Goal Conceded] AS NVARCHAR(180)) AS [Half Time_Goal Conceded]
                   , CAST([Half Time_Both Teams Scored] AS NVARCHAR(180)) AS [Half Time_Both Teams Scored]
                   , CAST([Half Time_Over 0.5] AS NVARCHAR(180)) AS [Half Time_Over 0.5]
                   , CAST([Half Time_Over 1.5] AS NVARCHAR(180)) AS [Half Time_Over 1.5]
                   , CAST([Half Time_Result] AS NVARCHAR(180)) AS [Half Time_Result]
                   , [Full Time Score]
                   , CAST([Full Time_Goal Scored] AS NVARCHAR(180)) AS [Full Time_Goal Scored]
                   , CAST([Full Time_Goal Conceded] AS NVARCHAR(180)) AS [Full Time_Goal Conceded]
                   , CAST([Full Time_Both Teams Scored] AS NVARCHAR(180)) AS [Full Time_Both Teams Scored]
                   , CAST([Full Time_Over 0.5] AS NVARCHAR(180)) AS [Full Time_Over 0.5]
                   , CAST([Full Time_Over 1.5] AS NVARCHAR(180)) AS [Full Time_Over 1.5]
                   , CAST([Full Time_Over 2.5] AS NVARCHAR(180)) AS [Full Time_Over 2.5]
                   , CAST([Full Time_Result] AS NVARCHAR(180)) AS [Full Time_Result]
              FROM
                     [Soccer_DatabASe].[dbo].[Imd_Match_Details]
       )
       [Imd_Match_Details] UNPIVOT (Results_Value FOR Results_Type in ([Half Time_Goal Scored]
                                                                     , [Half Time_Goal Conceded]
                                                                     , [Half Time_Both Teams Scored]
                                                                     , [Half Time_Over 0.5]
                                                                     , [Half Time_Over 1.5]
                                                                     , [Half Time_Result]
                                                                     , [Full Time_Goal Scored]
                                                                     , [Full Time_Goal Conceded]
                                                                     , [Full Time_Both Teams Scored]
                                                                     , [Full Time_Over 0.5]
                                                                     , [Full Time_Over 1.5]
                                                                     , [Full Time_Over 2.5]
                                                                     , [Full Time_Result]) ) AS ScoresUnpivot
WHERE
       [Dat_Cha_Team] + '_' + Results_Type NOT IN
       (
              SELECT
                     [Dat_Cha_Tea_Res Typ]
              FROM
                     [Soccer_Database].[dbo].[Ins_Match_Details]
       )

到目前为止你都尝试了什么,为什么不奏效?这类事情有很多例子,你看了哪些例子,哪些你不理解,或者没有像你预期的那样起作用?另外,请不要将样本数据作为图像发布;这对你请求帮助的志愿者没有帮助。数据应以格式化的
文本或DDL和DML语句的形式提供。谢谢。@Larnu我是SQL server的新手。老实说,我搜索的是“将单行拆分为多行”,有很多示例,但我不具备应用解决方案的基本知识。由于您对SQL Server(以及通常出现的数据库)不熟悉,让我给您一些建议:从基础开始。看看“标准化”(第一个标准形式等),从长远来看,这将对你有所帮助。第一列包含日期、主队和客队,这是一列中的三个不同数据项。