gpt4 book ai didi

sql - 如何选择列名并获取 SQL Server 的数据?

转载 作者:行者123 更新时间:2023-12-03 03:37:54 25 4
gpt4 key购买 nike

我想请求帮助获得一条 SELECT 语句,这将有助于我解决当前的困境。我正在使用 SQL Server 在 vb.net 中创建一个新项目,我的雇主希望我创建的报告之一是使用他们给我的 Excel 文件中的数据获取所需的零件名称和数量,但是,它的工作原理如下这个:

Sample Table

数据实际上比这个大得多(比如 200 多个部分),但这只是总体思路。我将在其中输入 DWG 名称,并且我想要一个具有如下输出的 SELECT:

(如果用户使用 DWG1:)

DWG1     1    Part3  
DWG1 2 Part4
DWG1 1 Part5

有没有办法只获取其中包含大于 0 的数字的列名,获取精确的数字是什么,然后获取该列名?我认为给我 Excel 文件的人没有考虑到正确的表结构。

最佳答案

UNPIVOT 的性能会更高,但如果您不想想要指定200 个字段,请考虑以下操作:

Declare @YourTable table (DWG varchar(25),Part1 int,Part2 int,Part3 int,Part4 int,Part5 int)
Insert into @YourTable values
('DWG1',0,0,1,2,1),
('DWG2',0,0,0,0,1)

Select C.*
From @YourTable A
Cross Apply (Select XMLData=cast((Select A.* for XML RAW) as xml)) B
Cross Apply (
Select DWG = r.value('@DWG','varchar(25)') --<< case sensitive
,Item = attr.value('local-name(.)','varchar(100)')
,Value = attr.value('.','varchar(max)') --<< can be int if desired
From B.XMLData.nodes('/row') as A(r)
Cross Apply A.r.nodes('./@*') as B(attr)
Where attr.value('local-name(.)','varchar(100)') not in ('DWG','OtherFieldsToExclude')
) C
--Where A.DWG='DWG1'

返回

DWG     Item    Value
DWG1 Part1 0
DWG1 Part2 0
DWG1 Part3 1
DWG1 Part4 2
DWG1 Part5 1
DWG2 Part1 0
DWG2 Part2 0
DWG2 Part3 0
DWG2 Part4 0
DWG2 Part5 1

关于sql - 如何选择列名并获取 SQL Server 的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42793934/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com