小编Bel*_*igh的帖子

合并两个表

SQL Server 2008 R2我有一个名为的主表Employees,其中包含大约 20 个字段。我有第二个电子表格,其中包含除 5 之外的所有字段UpdateToEmployees,我需要合并这些字段,Employees但仅在值不相同的地方。

执行此操作的最有效方法是什么?我的思考过程(可能很长)是:

  1. 运行 ASelect语句以获取值不相同的行
  2. 获取该结果集并插入到临时表中exists,用是/否值标记一个字段
  3. 如果该字段exists包含 yes 值 - 运行更新查询
  4. 如果该字段不exists包含值 - 运行插入查询

使用下面的 DDL - 我如何加入 empID 并更新记录 where when matched= Yes 或 True(无论它返回的是什么)并插入当前不存在的记录Employees

Create Table Employees
(
  empid varchar(50)
  ,empaddress varchar(500)
  ,phone varchar(12)
  ,emcontact1 varchar(500)
  ,emcontact2 varchar(500)
  ,active varchar(10)
  ,manager varchar(50)
  ,paygrade int
)

Insert Into Employees (empid,empaddress,phone,emcontact1, emcontact2, active, manager, paygrade) VALUES …
Run Code Online (Sandbox Code Playgroud)

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

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

带双引号的动态 SQL

我正在尝试运行动态 SQL 语句,它适用于任何storename没有撇号的语句。但是,当其中storename包含撇号时,语法不正确,但是在这种情况下我无法使用动态 SQL。

我应该如何修改此语法storename以包含 apastrophe?

这是 DDL

Declare @TestHyphens Table(StoreName varchar(500),topItemSale varchar(500))

Insert Into @TestHyphens (StoreName, topItemSale) Values
('Bob''s Burger''s','Pen'), ('Jacks Coffee Shop','Pencil')
,('Larry''s Hair Shack','Rainbow'), ('Manny''s Sandwich Shop','Sunglasses')

Declare @sql nvarchar(4000), @storename varchar(500)

Declare db_cursor CURSOR FOR
Select StoreName
FROM @TestHyphens

OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @storename

While @@FETCH_STATUS = 0
BEGIN

        Set @storename = REPLACE(@storename, '''', '''''''''');

        SET @storename = CHAR(39)+CHAR(39)+@storename+CHAR(39)+CHAR(39);

        SET @SQL = N'Select * from @TestHyphens where …
Run Code Online (Sandbox Code Playgroud)

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

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

从用户 ID 获取计数

我需要一种方法来获得ek与每个相关联的唯一计数userid

我想要的输出是:

74123    3
Run Code Online (Sandbox Code Playgroud)

但我似乎无法准确获得 Distinct 计数的语法。我只能让它返回 TOTAL 计数,这不是我所追求的。

数据线

    CREATE TABLE [dbo].[___________Purple](
    [userid] [int] NULL,
    [ek] [char](100) NULL
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF
GO
INSERT [dbo].[___________Purple] ([userid], [ek]) VALUES (71423, N'Black                                                                                               ')
GO
INSERT [dbo].[___________Purple] ([userid], [ek]) VALUES (71423, N'Black                                                                                               ')
GO
INSERT [dbo].[___________Purple] ([userid], [ek]) VALUES (71423, N'Black                                                                                               ')
GO
INSERT [dbo].[___________Purple] ([userid], [ek]) VALUES (71423, N'Black                                                                                               ')
GO
INSERT [dbo].[___________Purple] ([userid], [ek]) VALUES (71423, N'Black                                                                                               ')
GO
INSERT [dbo].[___________Purple] ([userid], [ek]) VALUES …
Run Code Online (Sandbox Code Playgroud)

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

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

只查询返回匹配数据

我正在尝试使用左外连接从两个表中返回数据。MetaKnight 拥有最多的 storeNames,我希望所有这些都返回,当然还有来自 KnightNinja 的相应数据。我把下面的语法放在一起,但我的语法只返回两个表中符合条件的商店的名称。例如,应该返回 Store D 和 Store E,因为日期是 2017 年 1 月 - 但语法不会返回它。为什么?

这是示例垃圾 DDL 和查询

Create Table MetaKnight
(
    storeName varchar(500) NOT NULL
    ,storeNumber varchar(100) NOT NULL Primary Key
    ,openDate date NOT NULL
)

Create NonClustered Index snIndex
On MetaKnight (storeName ASC)

Create Table KnightNinja 
(
    storeName varchar(500) NOT NULL
    ,ssID varchar(100) NOT NULL Primary Key
    ,c1 int not null Default(0)
    ,c2 int not null Default(0)
    ,c3 int not null Default(0)
    ,c4 int not null Default(0) …
Run Code Online (Sandbox Code Playgroud)

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

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

在 Where 子句中执行聚合

我想执行以下查询,该查询基本上显示计算的位置 >= .70 或 <= -.70 但是,我收到错误

消息 147,级别 15,状态 1,第 8 行
聚合可能不会出现在 WHERE 子句中,除非它位于包含在 HAVING 子句或选择列表中的子查询中,并且被聚合的列是外部引用。

这是示例 DDL - 编写此查询的合适方法是什么?

    Declare @Hamburger Table (empName varchar(200), e float, a float, saleid varchar(10))
Insert Into @Hamburger (empName, e,a, saleid) Values
('Jake', 362, 233, 'E111'), ('Jake', 1431, 2702, 'E112'), ('Blue', 849, 280, 'R222'), ('Blue', 1418, 299, 'R390')

Select empName, e, a, saleid, AmtGained = Sum(Coalesce(e,0))-Sum(Coalesce(a,0)),
DiscountPercent = Sum(Coalesce(e,0)-Coalesce(a,0))/NullIf(Sum(Coalesce(e,0)),0)
From @Hamburger
where ((Sum(Coalesce(e,0)-Coalesce(a,0))/NullIf(Sum(Coalesce(e,0)),0) >= .70)
OR (Sum(Coalesce(e,0)-Coalesce(a,0))/NullIf(Sum(Coalesce(e,0)),0) <= -.70))
Group By empName, …
Run Code Online (Sandbox Code Playgroud)

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

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

在更新语句中使用 SUM()

我以为我已经确定了这个语法,但是当我尝试执行时,我收到了 Incorrect syntax near ) 的错误。为什么我的语法不正确?

    ;with CTE As
    (
         Select max(entryID) As "MaxEntryID"
         ,userID FROM loghist group by userID
    )
    Select es.userID As userID, cm.companyName, SUM(COALESCE(eq.TotalValue,0)) As TotalValue
    FROM CTE vn
    Inner Join loghist es
    ON vn.userID=es.userID
    AND Coalesce(vn."MaxEntryID",0)=COALESCE(es.entryID,0)
    INNER JOIN company cm
    ON es.customerid = cm.customerid    
    Inner Join loghistpart ep
    ON ep.loghist = es.loghistid
    Inner Join lhq eq
    On eq.loghistpartid = ep.loghistpartid
    GROUP BY es.userID, cm.companyName
)
UPDATE fvi
Set TotalValue = loghistdTotalValue
FROM FullVarianceInfo fvi
INNER JOIN …
Run Code Online (Sandbox Code Playgroud)

sql-server cte t-sql sql-server-2008-r2 update

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

标签 统计

sql-server ×6

sql-server-2008-r2 ×6

t-sql ×6

cte ×1

merge ×1

update ×1