我有一个复杂的嵌套 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?
我有一桌电脑,想了解顶级电脑制造商的数量。由于数据将显示在饼图中,并且目前有大约 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 个制造商并将所有剩余制造商合并到“其他”类别中,以简化饼图中的输出?
我们从 servicenow 导入数据。传入的键是GUID,但是数据库设置为使用该列,因为nvarchar()将 sysid 列连接到其他表(也存储为nvarchar()但没有绘制关系)时,查询时间可能会非常慢。
除非我做一些繁重的索引,否则大多数报告运行缓慢或从不返回任何结果。我不想过度索引数据库并冒着空间不足的风险。是否建议将所有表中的nvarchar列转换为GUID?会坏吗?(加载问题)
我有以下动态查询,并希望传递一个运算符作为参数,但出现错误
@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 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)
我的查询返回此数据
但我想喜欢这个
我想要数量上的每月总和。我该怎么做?
我从网上的各种答案中拼凑了代码以获得我想要的结果,但是,我不明白它为什么起作用,我想知道 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) 我的数据在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 | 无效的 |
在我的产品表中,我有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) 我有一个数据库,其中有一个名为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)
我不明白为什么带方括号的查询没有返回任何结果.我知道方括号用作使用某些特殊字符或关键字的标识符的分隔符.
有人可以向我解释发生了什么,或者指导我阅读一些文章或书籍,在那里我可以更多地了解这种行为.
请考虑以下结果集:
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)