小编Rom*_*kar的帖子

SQL Server查询元素值的xml属性

对不起,如果这是在其他地方,我发现了很多类似的例子,但我一直无法使用我的数据.2天后,我需要一个答案:(

基本上有一个SQL Server表,其中包含一个包含XML数据的列.此数据包含我需要提取的值.

这是我的XML.

  <CustomFields xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.kaseya.com/vsa/2007/12/ServiceDeskDefinition.xsd">
    <Field fieldName="AutoCategory">Event Log</Field>
    <Field fieldName="SType">Event Log</Field>
    <Field fieldName="STag1">AgentGuid</Field>
    <Field fieldName="STag2">AlertRegistrationId</Field>
    <Field fieldName="STag3">LogType</Field>
    <Field fieldName="SValue1">619764177412541</Field>
    <Field fieldName="SValue2">104</Field>
    <Field fieldName="SValue3">1380569194</Field>
    <Field fieldName="SdTicketId">RPSv1006330</Field>
    <Field fieldName="AgentName">bla bla</Field>
    <Field fieldName="MachineGroupGuid">86115414719112271316891312</Field>
    <Field fieldName="OrgFk">59165166782128125214185317</Field>
    <Field fieldName="GuidAgent">619764177412541</Field>
    <Field fieldName="AlertCount">0</Field>
    <Field fieldName="TicketTitle">bla bla</Field>
    <Field fieldName="LegacyId">152262</Field>
    <Field fieldName="LegacyRef">152262</Field>
    <Field fieldName="CwStatus">2</Field>
    <Field fieldName="CwTicketId">89495</Field>
</CustomFields>
Run Code Online (Sandbox Code Playgroud)

我需要能够提取与CwTicketId字段名称关联的值.

所以从本质上讲,我想通过XML来查找带有fieldName = "CwTicketId"和返回的节点89495或等价值.

下面是我自己提出的代码,它将值拉出来,但问题是有时XML的排序方式不同,因此值并不总是在我指定的行上,因此它返回准确的数据.

;WITH XMLNAMESPACES(DEFAULT N'http://www.kaseya.com/vsa/2007/12/ServiceDeskDefinition.xsd')
SELECT 
    ref as ServiceDeskID, 
    sdSummary as ServiceDeskSummary,
    customFields.value('(/CustomFields/Field/node())[17]', 'varchar(100)') as LegacyIDTicketing,
    customFields.value('(/CustomFields/Field/node())[19]', 'varchar(100)') as CWIDTicketing …
Run Code Online (Sandbox Code Playgroud)

xml sql t-sql sql-server xquery

8
推荐指数
2
解决办法
2万
查看次数

Sql查询获取名称列为null

Sql小提琴

CREATE TABLE [Users_Reg]
(
   [User_ID]        [int] IDENTITY (1, 1) NOT NULL CONSTRAINT User_Reg_P_KEY PRIMARY KEY,
   [Name]           [varchar] (50) NOT NULL, 
   [Type]           [varchar] (50) NOT NULL /*Technician/Radiologist*/
)

CREATE Table [Study]
(
  [UID]             [INT] IDENTITY (1,1) NOT NULL CONSTRAINT Patient_Study_P_KEY PRIMARY KEY,
  [Radiologist]     [int], /*user id of Radiologist type*/
  [Technician]      [int], /*user id of Technician type*/

)


select * from Study
inner join Users_Reg
on Users_Reg.User_ID=Study.Radiologist
Run Code Online (Sandbox Code Playgroud)

在patient_study表中,放射科医师或技师可能有0值.我如何从查询中获得技术员姓名和放射科医生姓名.

sql t-sql sql-server

8
推荐指数
1
解决办法
254
查看次数

使用分区依据的SQL查询

我有以下表名JobTitle

JobID LanaguageID
-----------------
1         1
1         2
1         3
2         1
2         2 
3         4
4         5
5         2
Run Code Online (Sandbox Code Playgroud)

我从表中选择所有记录,除了重复JobID的计数> 1.我只从重复的JobID中选择一个记录/第一行.现在我将LanguageID作为参数传递给存储过程,我想为该languageID选择重复的JobID以及其他记录.如果我已将languageID作为1传递,则输出应如下所示

JobID LanaguageID
-----------------
1         1
2         1
3         4
4         5
5         2
Run Code Online (Sandbox Code Playgroud)

我尝试过使用以下查询.

with CTE_RN as
(
    SELECT ROW_NUMBER() OVER(PARTITION BY JobTitle.JobID ORDER BY JobTitle.JobTitle) AS RN
    FROM JobTitle
    INNER JOIN JobTitle_Lang
        ON JobTitle.JobTitleID = JobTitle_Lang.JobTitleID
)
Run Code Online (Sandbox Code Playgroud)

但我无法在上面的查询中使用WHERE子句.是否应遵循任何不同的方法.或者我如何修改查询以获得所需的输出

sql sql-server sql-server-2008

8
推荐指数
1
解决办法
3万
查看次数

存储日期范围的有效方式

我需要存储简单的数据 - 假设我有一些产品将代码作为主键,一些属性和有效范围.所以数据可能如下所示:

Products
code    value   begin_date  end_date
10905   13      2005-01-01  2016-12-31
10905   11      2017-01-01  null
Run Code Online (Sandbox Code Playgroud)

这些范围不重叠,所以在每个日期我都有一系列独特的产品及其属性.所以为了简化它的使用,我创建了这个函数:

create function dbo.f_Products
(
    @date date
)
returns table
as
return (
    select
    from dbo.Products as p
    where
        @date >= p.begin_date and
        @date <= p.end_date
)
Run Code Online (Sandbox Code Playgroud)

这就是我要用它的方式:

select
    *
from <some table with product codes> as t
    left join dbo.f_Products(@date) as p on
        p.code = t.product_code
Run Code Online (Sandbox Code Playgroud)

这一切都很好,但我怎么能让优化器知道那些行是唯一的,有更好的执行计划?

我做了一些谷歌搜索,发现了一些非常好的DDL文章,可以防止在表格中存储重叠范围:

但即使我尝试这些约束,我也看到优化器无法理解结果记录集将返回唯一代码.

我想要的是某种方法,它给了我基本相同的性能,就像我在某个日期存储这些产品列表并选择它一样date = @date.

我知道一些RDMBS(如PostgreSQL)具有特殊的数据类型(Range Types).但是SQL Server没有这样的东西.

我错过了什么,或者在SQL Server中没有办法正确地做到这一点?

sql sql-server date-range intervals sql-server-2016

8
推荐指数
1
解决办法
969
查看次数

六个月内保留的参与者百分比

我是一名非常适合MS SQL服务器的学校老师.每个人都建议尝试这个网站.开始!

我正在尝试编写查询来测试参与学术计划的不同类型的结果测量.有几种不同的方法来计算我想尝试的结果测量.我想要计算的结果是: 在六个月的课程中保留的参与者百分比是多少?我正在测试不同的方式来定义参与者和不同的时间范围.我正在尝试生成4个查询.不幸的是,我必须使用不同的表:出勤,状态,退出,非活动.我已经在下面列出了每个样本数据

查询

  1. 参与者被定义为每个人每周至少两次上课,为期6个月(总共181天),从2012年7月1日开始到2013年6月30日结束,因此是会计年度的长度.如果参与者退出不活动他们被丢弃了.
  2. 参与者被定义为从2013年1月1日开始,每周至少两次上课,为期6个月(总共181天)的每个人.如果参与者退出或变为非活动状态,则会被拒绝.
  3. 参与者被定义为从2013年1月1日至今每周至少两次上课的人
  4. 参与者被定义为学生的 注册开始日期,直到他们退出或变为非活动状态.

参与者(分子)参与者/所有服务的学生(分母)

我正在寻找的4个查询输出是这个的不同版本:

Participants    Served   Percent_Served
75               100        75%      
Run Code Online (Sandbox Code Playgroud)

我一直在乱搞下面的查询的不同版本

 SELECT 
Count (distinct ID) as Count, 
  Count  ( DATEADD( dd, -181, DATEADD(wk, DATEDIFF(wk,0,Date), 0)) > 2 as Participants ,
FROM Attendance
where Attendence_date date between '07/01/2012' and '06/30/2013'
and ID not in (Select ID from Inactive) 
or ID not in (select ID from Deenrolled) 
GROUP BY …
Run Code Online (Sandbox Code Playgroud)

sql sql-server date date-range

7
推荐指数
1
解决办法
276
查看次数

如何将文本添加到SQL列

我想在SQL表中更新1列.示例:列中的当前值如下所示

2013/09/pizzalover.jpg 
2013/10/pasta.jpg       
Run Code Online (Sandbox Code Playgroud)

现在我想像这样更新整个专栏:www.mypizza.com/2013/09/pizzalover.jpg有什么方法可以实现这个目标吗?提前致谢

sql sql-update

7
推荐指数
2
解决办法
5万
查看次数

使用SQL Server创建XML

我有一个数据表:

itemID          itemLocation    quantity
-------------------------------------------------------
B008KZK44E  COMMITED    1
B008KZK44E  PRIME       1
B008KZK2LE  COMMITED    1
Run Code Online (Sandbox Code Playgroud)

我需要用这个节点结构生成一个xml:

<inventoryItemData>
  <itemID type="FAMILY">B008KZK2LE</itemID>
  <availabilityDetail>
    <itemQuantity>
      <quantity unitOfMeasure="EA">1</quantity>
      <itemLocation>COMMITED</itemLocation>
    </itemQuantity>
  </availabilityDetail>
</inventoryItemData>
<inventoryItemData>
  <itemID type="FAMILY">B008KZK44E</itemID>
  <availabilityDetail>
    <itemQuantity>
      <quantity unitOfMeasure="EA">1</quantity>
      <itemLocation>COMMITED</itemLocation>
    </itemQuantity>
  </availabilityDetail>
  <availabilityDetail>
    <itemQuantity>
      <quantity unitOfMeasure="EA">1</quantity>
      <itemLocation>PRIME</itemLocation>
    </itemQuantity>
  </availabilityDetail>
</inventoryItemData>
Run Code Online (Sandbox Code Playgroud)

我越接近这个:

SELECT 
   'itemID' AS 'itemID/@type',
   itemID AS 'itemID',
   '' AS 'availabilityDetail',
   '' AS 'availabilityDetail/itemQuantity',
   'EA' AS 'availabilityDetail/itemQuantity/quantity/@unitOfMeasure',
   quantity AS 'availabilityDetail/itemQuantity/quantity',
   itemLocation AS 'availabilityDetail/itemQuantity/itemLocation'
FROM TABLE
FOR XML PATH ('inventoryItemData')
Run Code Online (Sandbox Code Playgroud)

我很感激任何解决方案.

谢谢.

xml sql t-sql sql-server sqlxml

7
推荐指数
1
解决办法
2万
查看次数

SQL累积计数

我有部门的表.我需要计算在哪个部门内有多少人.这很容易做到

SELECT DEPT,
       COUNT(*) as 'Total'
    FROM SR
    GROUP BY DEPT;
Run Code Online (Sandbox Code Playgroud)

现在我还要做累积计数如下:

在此输入图像描述

我发现一些SQL来计算运行总数,但不是这样的情况.在这种情况下,你能给我一些建议吗?

sql sql-server sql-server-2008

7
推荐指数
1
解决办法
1万
查看次数

Pandas按索引删除列

假设我有一个像这样的DataFrame:

>>> df = pd.DataFrame([[1,2,3], [4,5,6], [7,8,9]], columns=['a','b','b'])
>>> df
   a  b  b
0  1  2  3
1  4  5  6
2  7  8  9
Run Code Online (Sandbox Code Playgroud)

我想删除第二'b'列.如果我只使用del语句,它将删除两'b'列:

>>> del df['b']
>>> df
   a
0  1
1  4
2  7
Run Code Online (Sandbox Code Playgroud)

我可以逐个选择列.iloc[]并重新分配DataFrame,但是如何只删除第二'b'列,例如通过索引?

python pandas

7
推荐指数
1
解决办法
2万
查看次数

如何为sql server 2012中的另一个表中的每个父主键选择一个表的给定行数?

我在sql中有两个表.一个是测试用例表,另一个是测试运行表,其中一个外键链接回测试用例.我想为每个测试用例获得最近10次测试运行.如果我不需要,我不想循环,但我没有看到任何其他方法来解决这个问题.在sql server中处理这类事情最有效的方法是什么?

sql sql-server iteration sql-server-2012

7
推荐指数
1
解决办法
71
查看次数