小编Ses*_*ame的帖子

T-SQL基于分隔符拆分字符串

我有一些数据,我想根据可能存在或不存在的分隔符进行拆分.

示例数据:

John/Smith
Jane/Doe
Steve
Bob/Johnson
Run Code Online (Sandbox Code Playgroud)

我使用以下代码将此数据拆分为名字和姓氏:

SELECT SUBSTRING(myColumn, 1, CHARINDEX('/', myColumn)-1) AS FirstName,
       SUBSTRING(myColumn, CHARINDEX('/', myColumn) + 1, 1000) AS LastName
FROM   MyTable
Run Code Online (Sandbox Code Playgroud)

结果我想:

FirstName---LastName
John--------Smith
Jane--------Doe
Steve-------NULL
Bob---------Johnson
Run Code Online (Sandbox Code Playgroud)

只要所有行都具有预期的分隔符,此代码就可以正常工作,但是当行没有时出错:

"Invalid length parameter passed to the LEFT or SUBSTRING function."
Run Code Online (Sandbox Code Playgroud)

如何重写这个才能正常工作?

sql t-sql sql-server sql-server-2008 sql-server-2008-r2

43
推荐指数
4
解决办法
16万
查看次数

获取满足特定条件的数据表中的行数

我有一个数据表,dtFoo,并希望得到满足一定条件的行数.

编辑:此数据不存储在数据库中,因此使用SQL不是一个选项.

在过去,我使用以下两种方法来完成此任务:

方法1

int numberOfRecords = 0;
DataRow[] rows;

rows = dtFoo.Select("IsActive = 'Y'");
numberOfRecords = rows.Length;

Console.WriteLine("Count: " + numberOfRecords.ToString());
Run Code Online (Sandbox Code Playgroud)

方法2

int numberOfRecords = 0;

foreach (DataRow row in dtFoo.Rows)
{
    if (row["IsActive"].ToString() == "Y")
    {
        numberOfRecords++;
    }
}

Console.WriteLine("Count: " + numberOfRecords.ToString());
Run Code Online (Sandbox Code Playgroud)

我的店铺正在努力标准化一些事情,这是一个问题.我想知道哪种方法在性能方面最好(以及为什么!),以及最常用的方法.

此外,有更好的方法来达到预期的效果吗?

c# datatable criteria count

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

连接行值T-SQL

我试图将一些数据汇总到一个报告中,并需要连接其中一个表的行值.这是基本的表结构:

评测

 ReviewID  
 ReviewDate  
Run Code Online (Sandbox Code Playgroud)

评审

 ReviewerID  
 ReviewID  
 UserID  
Run Code Online (Sandbox Code Playgroud)

用户

UserID  
FName  
LName  
Run Code Online (Sandbox Code Playgroud)

这是M:M的关系.每个评论都可以有很多评论者; 每个用户都可以与许多评论相关联.

基本上,我想要看的是Reviews.ReviewID,Reviews.ReviewDate,以及该Review的所有相关用户的FName的串联字符串(逗号分隔).

代替:

ReviewID---ReviewDate---User  
1----------12/1/2009----Bob  
1----------12/1/2009----Joe  
1----------12/1/2009----Frank  
2----------12/9/2009----Sue  
2----------12/9/2009----Alice  
Run Code Online (Sandbox Code Playgroud)

显示这个:

ReviewID---ReviewDate----Users  
1----------12/1/2009-----Bob, Joe, Frank  
2----------12/9/2009-----Sue, Alice
Run Code Online (Sandbox Code Playgroud)

我发现这篇文章描述了一些方法,但是大多数方法似乎只处理一个表而不是多个; 不幸的是,我的SQL-fu不够强大,无法根据我的情况进行调整.我对该网站上使用FOR XML PATH()的示例特别感兴趣,因为它看起来最干净,最直接.

SELECT p1.CategoryId,
( SELECT ProductName + ', '
  FROM Northwind.dbo.Products p2
  WHERE p2.CategoryId = p1.CategoryId
  ORDER BY ProductName FOR XML PATH('')
) AS Products
FROM Northwind.dbo.Products p1
GROUP BY CategoryId;
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我一把吗?任何帮助将不胜感激!

sql t-sql sql-server concatenation

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

SSMS 2008中的#region功能

使用Sql Server 2008,是否有类似于Visual Studio中的#region的功能?

我知道节点似乎允许折叠SQL段,但据我所知,这是基于SQL语句的语法.

虽然这接近我所追求的,但我想知道是否有一种方法可以定义一段代码,无论语法如何,类似于#region/#endregion.

有什么想法吗?

sql sql-server region visual-studio

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

如果field为null,则拉出某些字段; 否则,拉其他领域

我有下表:

TestTable  
  ColumnA  
  Column1  
  Column2  
  Column3  
  Column4 
Run Code Online (Sandbox Code Playgroud)

我想编写一个简单的SQL语句来检查ColumnA,并根据它是否为null返回某些列.

像(伪)的东西:

If ColumnA Is Null
  SELECT ColumnA, Column1, Column2 
  FROM TestTable
Else
  SELECT ColumnA, Column3, Column4
  FROM TestTable
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

sql sql-server oracle

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

使用EWS查找收件箱文件夹的所有子文件夹

我有以下收件箱文件夹结构:

Inbox
--ABC
----ABC 2
----ABC 3
--XYZ
----XYZ 2
--123
----123 A
----123 B
----123 C
Run Code Online (Sandbox Code Playgroud)

我正在使用Exchange Web服务和以下代码来查找收件箱文件夹的子文件夹:

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010);

service.AutodiscoverUrl("MyName@MyDomain.com");
Mailbox mb = new Mailbox("MyName@MyDomain.com");

FindFoldersResults findResults = service.FindFolders(
    WellKnownFolderName.Inbox,
    new FolderView(int.MaxValue));

foreach (Folder folder in findResults.Folders)
{
    Console.WriteLine(folder.DisplayName);
}
Run Code Online (Sandbox Code Playgroud)

这部分有效,因为它返回ABC,XYZ和123文件夹; 不幸的是,它没有返回每个文件夹内的文件夹(ABC 2,ABC 3,XYZ 2,123 A,123 B,123 C).

此外,文件夹可能在其中具有多个级别的子文件夹.

如何编写此代码,以便它将返回所有子文件夹,无论它们的嵌套程度如何?

c# recursion exchange-server exchangewebservices

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

循环分配

我有一个客户表,并希望以循环方式为每个客户分配销售人员.

Customers  
--CustomerID  
--FName  
--SalespersonID

Salesperson  
--SalespersonID  
--FName  
Run Code Online (Sandbox Code Playgroud)

所以,如果我有15个客户和5个销售人员,我希望最终结果看起来像这样:

CustomerID -- FName -- SalespersonID  
1 -- A -- 1  
2 -- B -- 2  
3 -- C -- 3  
4 -- D -- 4  
5 -- E -- 5  
6 -- F -- 1  
7 -- G -- 2  
8 -- H -- 3  
9 -- I -- 4  
10 -- J -- 5  
11 -- K -- 1  
12 -- L -- 2  
13 -- M -- 3  
14 …
Run Code Online (Sandbox Code Playgroud)

sql round-robin sql-update

6
推荐指数
1
解决办法
6610
查看次数

以只读方式打开文件

在C#WinForms应用程序中,我使用System.IO.Diagnostics.Process.Start(fileName)来打开文件.文件类型可以是.doc,.docx,.xls,.xlsx,.csv,.pdf或.txt.

有没有办法强制这些文件以只读方式打开?

c# readonly winforms

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

将非规范化文件中的数据加载到规范化表中

我收到一个非规范化的文本文件,必须加载到规范化的表中.

非规范化表:

客户ID - 类别 - 类别2 - 类别3 - 类别4
1 - A - B - C - D.

当这被标准化时,它应该看起来像:

客户ID - 类别
1 - A
1 - B
1 - C
1 - D.

编写T-SQL语句以实现此目的的最佳方法是什么(SQL Server 2008)?

sql t-sql sql-server normalization denormalization

5
推荐指数
1
解决办法
2089
查看次数

按分组获取数据表中的记录数

我有一个包含以下数据的DataTable:

Salesman---ClientID
Bob--------1
Bob--------2
Bob--------3
Tom--------4
Joe--------5
Joe--------6
Tim--------7
Tim--------8
Run Code Online (Sandbox Code Playgroud)

由此,我想了解每个推销员有多少客户.在这种情况下:

Salesman---CountOfClients
Bob--------3
Tom--------1
Joe--------2
Tim--------2
Run Code Online (Sandbox Code Playgroud)

此程序正在读取包含此数据的文本文件,并且未连接到数据库,因此SQL不是一个选项.

使用C#,我如何才能达到预期的效果?

c# datatable count

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