Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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_Sql Server_Pivot_Unpivot - Fatal编程技术网

如何在SQL Server中取消激活表?

如何在SQL Server中取消激活表?,sql,sql-server,pivot,unpivot,Sql,Sql Server,Pivot,Unpivot,我正试图解压我的数据,但得到了一些奇怪的结果。我怎样才能做到这一点 下面是我的代码和结果截图。() 还要考虑到我还有更多的列要选择 这是我使用的参考资料 以上例子的例子 您可以在此处使用交叉应用代替unpivot。我发现语法更容易理解,并且可以保留空值。尝试以下方法: select recid, casenumber, servtype, mins from CaseManagementProgressNote a cross apply (VALUES (preEnrollment_type,

我正试图解压我的数据,但得到了一些奇怪的结果。我怎样才能做到这一点

下面是我的代码和结果截图。()

还要考虑到我还有更多的列要选择

这是我使用的参考资料


以上例子的例子

您可以在此处使用
交叉应用
代替
unpivot
。我发现语法更容易理解,并且可以保留空值。尝试以下方法:

select recid, casenumber, servtype, mins
from CaseManagementProgressNote a
cross apply (VALUES (preEnrollment_type, preEnrollment_minutes),
                    (screening_type, screeningEna_Minutes),
                    (ifsp_type, ifsp_minutes)) unpvt (servtype, mins)

您似乎觉得您的两个
UNPIVOT
操作有某种联系。它们不是,只是对第一个结果执行第二个
UNPIVOT

如果您查看第一次
取消PIVOT的结果

select *
from
(
    select 
        recid
        ,caseNumber
        ,[preEnrollment_type]
        ,[preEnrollment_minutes]
        ,[screening_type]
        ,[screeningEnA_minutes]
        ,[ifsp_type]
        ,[ifsp_minutes]
    from
        CaseManagementProgressNote
) as cp
unpivot
(
    servType for servTypes in ([preEnrollment_type],[screening_type],[ifsp_type])
) as up1
你会看到

╔═════════╦═════════════╦════════════════════════╦═══════════════════════╦═══════════════╦═══════════╦════════════════════╗ ║ recid ║ caseNumber ║ preEnrollment_minutes ║ screeningEnA_minutes ║ ifsp_minutes ║ servType ║ servTypes ║ ╠═════════╬═════════════╬════════════════════════╬═══════════════════════╬═══════════════╬═══════════╬════════════════════╣ ║ 143039 ║ 964699 ║ (null) ║ 45 ║ 20 ║ -NA- ║ preEnrollment_type ║ ║ 143039 ║ 964699 ║ (null) ║ 45 ║ 20 ║ SC ║ screening_type ║ ║ 143039 ║ 964699 ║ (null) ║ 45 ║ 20 ║ TCM FF ║ ifsp_type ║ ╚═════════╩═════════════╩════════════════════════╩═══════════════════════╩═══════════════╩═══════════╩════════════════════╝ 或者使用@ander2ed的方法,完全删除
UNPIVOT
,如果您不介意它没有过滤掉
NULL
s

您链接到的文章也讨论了这个问题:

这里唯一的复杂之处是将输出电话与相应的电话类型相匹配——为此,我们需要进行一些字符串查询,以确保Phone1与PhoneType1匹配,Phone2与PhoneType2匹配,等等

它通过执行第二个
UNPIVOT
,然后过滤结果来解决这个问题。您可以通过链接
servTypes
minutess
使其工作。在特定的示例数据中,它们的第一个字符足以识别,并且在两列中是相同的,因此可以将
where left(servTypes,1)=left(minutess,1)
添加到查询中


这对我来说似乎毫无意义的复杂,我不推荐这样做,但这是文章和你的查询之间的区别,这也是你的查询在文章运行时不起作用的原因。

如果你添加了SQL,你很有可能得到一个有用的问题答案。我喜欢这个查询中的语法,但是,它不在SQL Server中运行。它确实在SQL FIDLE tho中运行。SQL Server在关键字“VALUES”附近给了我以下错误
不正确的语法。
很有趣。您使用的是什么版本的SQL?它在我的计算机上的Microsoft SQL Server 2008 r2.SQL Server Studio 2012中对我有效,但实际的数据库在SQL Server 2005中。我怀疑直到SQL Server 2008才支持交叉应用(values())。那太不幸了。很高兴你从@hvd找到了答案:)我添加了
case
语句,效果很好!!。。。谢谢你的解释
select *
from
(
    select 
        recid
        ,caseNumber
        ,[preEnrollment_type]
        ,[preEnrollment_minutes]
        ,[screening_type]
        ,[screeningEnA_minutes]
        ,[ifsp_type]
        ,[ifsp_minutes]
    from
        CaseManagementProgressNote
) as cp
unpivot
(
    servType for servTypes in ([preEnrollment_type],[screening_type],[ifsp_type])
) as up1
╔═════════╦═════════════╦════════════════════════╦═══════════════════════╦═══════════════╦═══════════╦════════════════════╗ ║ recid ║ caseNumber ║ preEnrollment_minutes ║ screeningEnA_minutes ║ ifsp_minutes ║ servType ║ servTypes ║ ╠═════════╬═════════════╬════════════════════════╬═══════════════════════╬═══════════════╬═══════════╬════════════════════╣ ║ 143039 ║ 964699 ║ (null) ║ 45 ║ 20 ║ -NA- ║ preEnrollment_type ║ ║ 143039 ║ 964699 ║ (null) ║ 45 ║ 20 ║ SC ║ screening_type ║ ║ 143039 ║ 964699 ║ (null) ║ 45 ║ 20 ║ TCM FF ║ ifsp_type ║ ╚═════════╩═════════════╩════════════════════════╩═══════════════════════╩═══════════════╩═══════════╩════════════════════╝
CASE servType
WHEN 'preEnrollment_type' THEN preEnrollment_minutes
WHEN 'screening_type' THEN screeningEnA_minutes
WHEN 'ifsp_type' THEN isfp_minutes
END