标签: sql-server-2014

如何将嵌套的XML转换成对应的表?

我有一个复杂的嵌套 XML(从 C# 实体图生成),例如:

<Customers>
  <Customer>
    <Id>1</Id>
    <Number>12345</Number>
    <Addresses>
      <Address>
        <Id>100</Id>
        <Street>my street </street>
        <city>London</city>
      </Address>
      <Address>
        <Id>101</Id>
        <street>my street 2</street>
        <city>Berlin</city>
      </Address>
    </Addresses>
    <BankDetails>
      <BankDetail>
        <Id>222</Id>
        <Iban>DE8439834934939434333</Iban>
      </BankDetail>
      <BankDetail>
        <Id>228</Id>
        <Iban>UK1237921391239123213</Iban>
      </BankDetail>
    </BankDetails>
    <Orders>
      <Order>         
        <OrderLine>         
        </OrderLine>
      </Order>
    </Orders>
  </Customer>
</Customers>
Run Code Online (Sandbox Code Playgroud)

在将上述 XML 数据保存到实际表中之前,我需要先对其进行处理。为此,我创建了相应的表类型。这些表类型中的每一个都有一个额外的列(guid 为 ROWGUID),因此,如果我正在处理新数据(尚未分配主键),我会生成一个唯一键。我使用此列来保持不同表类型之间的关系完整性。

将上述嵌套 XML 转换为其相应表的 SQL 语法是什么,请记住子记录必须引用生成的父 guid?

xml sql sql-server-2014 sql-server-2016

0
推荐指数
1
解决办法
2708
查看次数

算 TOP 5,其他都算“其他”

我有一桌电脑,想了解顶级电脑制造商的数量。由于数据将显示在饼图中,并且目前有大约 45 个不同的制造商,因此我想获取前 5 个制造商的数量,然后将其他所有内容合并到“其他”中。

以下查询将返回按制造商列出的所有 PC 的计数:

SELECT 
    f_assetmanufacturer,
    COUNT(*) as 'PCs'
FROM tb_assets 
GROUP BY f_assetmanufacturer
Run Code Online (Sandbox Code Playgroud)

上述查询的示例输出为:

f_assetmanufacturer    PCs
-----------------------------
Dell                   100
HP                     50
Lenovo                 25
Acer                   24
Toshiba                23
Microsoft              20
Equus                  20
Thinix                 20
Advantech              20
Run Code Online (Sandbox Code Playgroud)

期望的输出如下:

f_assetmanufacturer    PCs                   f_assetmanufacturer    PCs
-----------------------------                -----------------------------
Dell                   100                   Dell                   100
HP                     50                    Other                  100
Lenovo                 25          or        HP                     50
Acer                   24                    Lenovo                 25    
Toshiba                23                    Acer                   24
Other                  100                   Toshiba                23
Run Code Online (Sandbox Code Playgroud)

如何仅选择前 5 个制造商并将所有剩余制造商合并到“其他”类别中,以简化饼图中的输出?

t-sql sql-server sql-server-2014

0
推荐指数
1
解决办法
249
查看次数

在 SQL Server 2014 中使用 Guid 作为 PK

我们从 servicenow 导入数据。传入的键是GUID,但是数据库设置为使用该列,因为nvarchar()将 sysid 列连接到其他表(也存储为nvarchar()但没有绘制关系)时,查询时间可能会非常慢。

除非我做一些繁重的索引,否则大多数报告运行缓慢或从不返回任何结果。我不想过度索引数据库并冒着空间不足的风险。是否建议将所有表中的nvarchar列转换为GUID?会坏吗?(加载问题)

sql-server sql-server-2014

0
推荐指数
1
解决办法
46
查看次数

将运算符作为存储过程中的参数传递,同时防止 SQL 注入的风险

我有以下动态查询,并希望传递一个运算符作为参数,但出现错误

@ageOperator 附近的语法不正确

另外,我想防止任何SQL注入。我可以像下面那样进行串联,但它会导致 SQL 注入。

@sWhere = ' WHERE AGE1 ' + @ageOperator + ''' + @age + '''
Run Code Online (Sandbox Code Playgroud)

先感谢您!

DECLARE @age INT, 
        @ageOperator VARCHAR(10), 
        @sSQL NVARCHAR(MAX), 
        @sWhere NVARCHAR(MAX)

SET @age = 21
SET @ageOperator = ' = '

SET @sWhere = ' WHERE AGE1 @ageOperator @age '

SET @sSQL = ' SELECT * FROM WEBPM_COPY.DBO.Test1111 ' + @sWhere 

EXEC sp_executesql @sSQL, N'@age INT, @ageOperator char(10)', @age, @ageOperator;
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2014

0
推荐指数
1
解决办法
1199
查看次数

在 SQL Server Query 中获取月度数据

我正在尝试按月获取数据,因为我创建了查询,但结果中有一些重复的记录,如下所示,使用 SQL Server。

SELECT DM.deptdesc, 
   PIM.itemcode, 
   PIM.itemdesc, 
   Isnull(Sum(IM.issuedqty), 0) AS 'Issued', 
   Datename(month, IM.dt)       AS MONTH, 
   Year(IM.dt)                  AS year 
FROM  poitemmaster AS PIM 
   inner JOIN issuematerial AS IM 
                ON PIM.itemcode = IM.itemcode 
   LEFT OUTER JOIN departmentmaster AS DM 
                ON PIM.deptcode = DM.deptcode 
WHERE  PIM.itemcode = 'ICMEL00001' 
GROUP  BY DM.deptdesc, 
      PIM.itemcode, 
      PIM.itemdesc, 
      IM.issuedqty, 
      Datename(month, IM.dt), 
      Year(IM.dt) 
Run Code Online (Sandbox Code Playgroud)

我的查询返回此数据

查询默认返回数据

但我想喜欢这个

其实我想喜欢这个

我想要数量上的每月总和。我该怎么做?

sql-server sql-server-2014

0
推荐指数
1
解决办法
53
查看次数

TSQL - 计算从昨天到今天的值之间的差异,SELF JOIN 问题

我从网上的各种答案中拼凑了代码以获得我想要的结果,但是,我不明白它为什么起作用,我想知道 JOIN 在它说 RowNum + 1 的地方实际上在做什么。

最初的问题是计算从昨天到今天的值之间的百分比差异。我对自联接有点模糊,但我确实了解自联接。当我添加 RowNum 列时,这让我感到困惑。


请问 T2.RowNum = T1.RowNum + 1 在自连接中做什么?

IF OBJECT_ID('tempdb..#t1') IS NOT NULL DROP TABLE #t1

CREATE TABLE #T1 (
ProductTotal int
,CountDate date
)

INSERT INTO #t1
VALUES 
       (893911,'20200815')
      ,(888970,'20200816')
      ,(899999,'20200817')
      

WITH cte AS (
SELECT 
 ROW_NUMBER() OVER(ORDER BY CountDate) AS RowNum
,ProductTotal
,CountDate
FROM #t1
WHERE   CountDate > CAST(GETDATE () - 2 AS DATE)
)
SELECT 
    t1.RowNum
   ,t1.ProductTotal   
   ,CAST(((t1.ProductTotal - t2.ProductTotal) * 1.0 / t2.ProductTotal) * 100 AS …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server-2014

0
推荐指数
1
解决办法
83
查看次数

如何将长桌子转为宽桌子?

我的数据在testtable

费查登记处 IdRecordRedcap 费查登记处 diario_total_pruebas 日记_pruebas_negativas 日记_pruebas_rechazadas
15 15 2022-01-06 510 第384章 无效的

UNPIVOT我需要在没有该功能的情况下对以下数据进行逆透视

费查登记处 IdRecordRedcap 瓦尔 价值
2022-01-06 15 diario_total_pruebas 510
2022-01-06 15 日记_pruebas_negativas 第384章
2022-01-06 15 日记_pruebas_rechazadas 无效的

此 db<>fiddle 中的结构和示例数据

sql sql-server sql-server-2014

0
推荐指数
1
解决办法
277
查看次数

嵌套的SQL游标

在我的产品表中,我有14种产品,对于每种产品,我需要在美国的每个州都有一排.我试图通过以下方式实现这一目标:

begin tran
declare @state varchar(2),
        @productId int

declare stateCursor CURSOR FOR
select distinct [State]
from lookUpAreaFactor

declare productCursor CURSOR FOR
select distinct productid 
from Product


open stateCursor
open productCursor
FETCH NEXT from stateCursor into @state
fetch next from productCursor into @productId
while @@FETCH_STATUS = 0
BEGIN

        while @@FETCH_STATUS = 0
        BEGIN
            insert into ProductToState (ProductID,[State]) values (@productId,@state)
            fetch next from productCursor into @productId
        END
    fetch next from stateCursor into @state
END

close stateCursor
close productCursor
select * from producttostate …
Run Code Online (Sandbox Code Playgroud)

sql cursors sql-server-2014

-1
推荐指数
1
解决办法
312
查看次数

SQL查询中带方括号的意外结果

我有一个数据库,其中有一个名为PaymentRecieptI 的表正在玩,并且从一个简单的select all查询中发现了一些意想不到的结果.

// Return 3139 rows
select * from PaymentReciept

// Return 3139 rows
select * from dbo.PaymentReciept 

// Return 0 rows
select * from [dbo.PaymentReciept]
Run Code Online (Sandbox Code Playgroud)

我不明白为什么带方括号的查询没有返回任何结果.我知道方括号用作使用某些特殊字符或关键字的标识符的分隔符.

有人可以向我解释发生了什么,或者指导我阅读一些文章或书籍,在那里我可以更多地了解这种行为.

sql sql-server-2014

-1
推荐指数
1
解决办法
181
查看次数

组中的条件排序

请考虑以下结果集:

Name     Value1     Value2     Value3
---------------------------------------
ccc       1          2           3
aaa       3          4           3
bbb       2          8           5
Group 1   2          1           3
rrr       1          2           5
mmm       3          4           4
nnn       3          2           1
eee       2          6           5
Group 2   2          4           4
...
Run Code Online (Sandbox Code Playgroud)

如您所见,每个组中的记录不按字母顺序排序.我如何按字母顺序对每组中的记录进行排序?

期望的结果集是:

Name     Value1     Value2     Value3
---------------------------------------
aaa       3          4           3
bbb       2          8           5
ccc       1          2           3
Group 1   2          1           3
eee       2          6           5
mmm       3          4           4
nnn       3          2 …
Run Code Online (Sandbox Code Playgroud)

sql sql-server sorting group-by sql-server-2014

-1
推荐指数
1
解决办法
73
查看次数