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

标签 sql sql-server excel vb.net

我想请求帮助获得一条 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/

相关文章:

c# - 求和函数有问题

sql - 从 generate_series(int, int) 函数更新表 Postgres 9.0

sql - 如何在 sql 命令中使用单引号?

sql-server - 将动态查询导出到表

vba - SENDKEYS 语句执行失败

mysql BETWEEN 对字符的权利是独占的吗?

sql - SQL中如何根据多个 'tags'查询数据?

sql-server - SQL Server 闩锁及其对性能问题的指示

excel - 在 excel 中组合两个数字,同时确保第二个数字有两位数

excel - 需要将用户选择的工作表名称分配给变量