小编M.A*_*Ali的帖子

如何计算分组中的总分百分比?

我有一张桌子,每位销售人员每天销售1条记录

NAME  DATE
joe   1-1-13
joe   1-1-13
joe   1-1-13
dave  1-1-13
joe   1-2-13
Run Code Online (Sandbox Code Playgroud)

我用它来创建和填充表格

create table #sales (name varchar(10), salesdate date )
insert into #sales (name, salesdate) 
values ('joe', '01-01-2013'), ('joe','01-01-2013'), 
       ('joe', '01-01-2013'), ('dave','01-01-2013'),  
         ('joe','01-02-2013')
Run Code Online (Sandbox Code Playgroud)

我想要一个查询来提高每个销售人员的销售额百分比

(例如在1-1-13乔售出3个单位共有4个一天(75%),但我不知道SQL怎么能每日总量当天的所有销售的拉涨,无论销售人员

这跟我一样接近.

select name, salesdate, count(*) as "dailyTotal"
from #sales
group by name, salesdate
Run Code Online (Sandbox Code Playgroud)

如何包含每日总计,以便它可用于计算当天的总百分比?

sql sql-server

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

AD 的 SQL 链接服务器查询返回消息 7321

因此,我有一个 SQL 查询,可以毫无问题地从 Active Directory 中提取数据(出于发布目的而精简):

SELECT TOP 901 * 
FROM OpenQuery(ADSI, 'SELECT title, displayName, sAMAccountName, givenName, sn 
               FROM ''LDAP://DC=[STUFF],DC=[MOAR STUFF],DC=com'' 
               where objectCategory = ''Person'' AND objectClass = ''User''')
Run Code Online (Sandbox Code Playgroud)

这会按预期拉取记录。我需要从我们信任的其他域中提取记录,因此我只需要更改 LDAP 字符串。但这样做只会返回一个泛型

“准备查询时发生错误...针对链接服务器“ADSI”**的 OLE DB 提供程序“ADSDSOObject”执行”(消息 7321,级别 16,状态 2)。

我说通用,因为我可以在 SELECT 语句中键入任何内容(将其搞乱),并且我会得到相同的消息。

我尝试过在字符串中使用和不使用 FQDN。我已确认链接服务器使用的登录名具有读取权限。有任何想法吗?

提前致谢!

-卡尔

sql sql-server adsi active-directory

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

查找所有具有 X 列名称的表

有没有办法找到 Y 数据库中具有 X 列名称的所有表?

所以

如果 X.Column 存在于 Y.Database 中则打印带有 x.column 的 all.tables

谢谢

sql sql-server

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

在表级别启用 CDC 时出错

我在 SQL Server 2012 企业版 (11.0.2100.60) 上启用变更数据捕获 (CDC)

. 我可以使用以下 SQL 在数据库级别启用它,但无法在表级别启用。

Use DatabaseName
GO

Exec sys.sp_cdc_enable_db 
GO

EXEC sys.sp_cdc_enable_table @source_schema = N'dbo'
                            ,@source_name = N'TableName'
                            , @role_name = NULL
GO
Run Code Online (Sandbox Code Playgroud)

得到错误,如

'msg 22832,级别 16,状态 1,过程 sp_cdc_enable_table_internal,第 623 行

无法更新指示表 [dbo].[TableName] 已为变更数据捕获启用的元数据。执行命令 '[sys].[sp_cdc_add_job] @job_type = N'capture'' 时发生故障。返回的错误为 22836:“无法更新数据库 DatabaseName 的元数据以指示已添加变更数据捕获作业。执行命令“sp_add_jobstep_internal”时发生故障。返回的错误为 14234:“指定的‘@server’无效(sp_helpserver 返回有效值)。”。使用操作和错误来确定失败的原因并重新提交请求。'。使用操作和错误来确定失败的原因并重新提交请求。

有人会帮助我摆脱这种情况吗?

提前致谢..!!

sql sql-server cdc

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

在SQL Server中编写一个Insert Insert Trigger

有一个After Insert触发器.正在写入的原始表具有将采用任何数字的数量字段.但是,插入后触发的触发器必须为每个QTY写入一次事务表.因此,如果原始QTY为4,那么当触发器触发时,它必须将记录写入四次.

USE [BLAH]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO


ALTER TRIGGER [dbo].[Track_Change_Detail]   
   ON  [dbo].[MYtABLE]
   AFTER Insert
AS 
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    Declare @Reason varchar(255),
    @TransID  nvarchar(10),
    @Qty bigint,
    @UserID nvarchar(10),
    @Disp   nvarchar(3),
    @ItemNumber nvarchar(20),
    @ItemLevel nchar(1),
    @LocalQTY   Int

    Declare @curChg Cursor
    begin
        --insert into BLAH.dbo.Transactions
        set @curChg = CURSOR FAST_FORWARD FOR
        SELECT              inserted.TransiD, 
                            inserted.Item_num, 
                            inserted.Quantity,
                            inserted.Logged_in,
                            Inserted.Lvl,
                            Inserted.Disposition 

        FROM                inserted …
Run Code Online (Sandbox Code Playgroud)

sql-server

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

将SQL Server中的计数器分配给具有连续日期的记录,并仅在日期不连续时递增

我正在尝试Trip #为具有连续天数的客户分配一个记录,如果他们在连续几天中断,并且例如在本月晚些时候到达,则增加旅行ID.数据结构如下所示:

CustomerID    Date
1             2014-01-01
1             2014-01-02
1             2014-01-04
2             2014-01-01
2             2014-01-05
2             2014-01-06
2             2014-01-08
Run Code Online (Sandbox Code Playgroud)

基于上述示例数据集的所需输出将是:

CustomerID    Date          Trip
1             2014-01-01    1
1             2014-01-02    1
1             2014-01-04    2
2             2014-01-01    1
2             2014-01-05    2
2             2014-01-06    2
2             2014-01-08    3
Run Code Online (Sandbox Code Playgroud)

因此,如果该客户的日期是背靠背,则它被认为是相同的旅行,并且具有相同的旅行#.有没有办法在SQL Server中执行此操作?我正在使用MSSQL 2012.

我最初的想法是使用LAG,ROW_NUMBEROVER/PARTITION BY功能,甚至一个Recursive Table Variable Function.我可以粘贴一些代码,但说实话,我的代码到目前为止还没有.如果这是一个简单的查询,但我只是没有正确地考虑它,那将是很好的.

先感谢您.

sql sql-server sql-server-2012

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

选择父记录和子记录

我如何选择公司及其子公司的所有员工?

使用SQL Server 2008

雇员

Id | Name | CompanyId  
Run Code Online (Sandbox Code Playgroud)

公司

Id | Name | ParentCompanyId  
Run Code Online (Sandbox Code Playgroud)

例:

1 Microsoft 0

2微软印度1

3 Microsoft Spain 1

我有下面这个查询,它只给微软的员工,而不是微软的印度和西班牙.

SELECT Id, Name FROM Employee WHERE CompanyId=1
Run Code Online (Sandbox Code Playgroud)

我不擅长SQL.帮助我.

sql sql-server sql-server-2008

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

为什么我得到额外的(1行受影响)

我正在更新sql server表并只更新一条记录.但是我收到消息(1行(s)受影响)这么多次为什么呢?我的查询如下:

UPDATE V2HRMS.dbo.tbl_pm_employee
    SET LeavingDate='06-26-2013'
       ,Status=1 
WHERE EmployeeCode=3407
Run Code Online (Sandbox Code Playgroud)

这只是我的知识.

sql sql-server sql-server-2008-r2

3
推荐指数
2
解决办法
2230
查看次数

使用 T-SQL 创建表 - 在对象资源管理器中看不到创建的表

使用微软 SQL

尝试使用 T-SQL 语言创建表。代码非常简单,执行成功,但我在对象资源管理器中没有看到创建的表。尝试重新启动/重新连接/刷新/重新执行 - 结果相同 - 看不到此表。也尝试手动执行(通过在对象资源管理器中的树中右键单击鼠标 - 一切正常 - 可以看到刚刚创建的表)。

代码:

USE tempdb 
    IF OBJECT_ID('dbo.Employees','U') IS NOT NULL
DROP TABLE dbo.Employees;
CREATE TABLE dbo.Employees
(
    empid INT NOT NULL,
    firstname VARCHAR(30) NOT NULL,
    lastname VARCHAR(30) NOT NULL,
    hiredate DATE NOT NULL,
    mgrid INT NULL,
    ssn VARCHAR(20) NOT NULL,
    salary MONEY NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

截屏

在此处输入图片说明

觉得这个问题很简单,还是试着找答案,稍微堆叠一下。为什么我没有看到刚刚创建的表?此代码对于创建表是否正确?

sql t-sql sql-server

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

数据库处于Transition状态

今天我试图通过已经存在的数据库恢复数据库,我只需右键单击SSMS中的数据库 - >任务 - >脱机,这样我就可以恢复数据库了.

一个小的弹出窗口出现并显示Query Executing.....了一段时间然后抛出一个错误说Database is in use cannot take it offline.我从中收集了一些与该数据库的活动连接,因此我尝试执行以下查询

USE master
GO
ALTER DATABASE My_DatabaseName
SET OFFLINE WITH ROLLBACK IMMEDIATE
GO
Run Code Online (Sandbox Code Playgroud)

此时SSMS再次出现Query Executing.....一段时间,然后抛出以下错误:

Msg 5061, Level 16, State 1, Line 1
ALTER DATABASE failed because a lock could not be placed on database 'My_DatabaseName'. Try again later.
Msg 5069, Level 16, State 1, Line 1
ALTER DATABASE statement failed.
Run Code Online (Sandbox Code Playgroud)

在此之后,我无法通过SSMS连接到数据库.当我尝试使用SSMS脱机时,它抛出一个错误说:

Database is in Transition. Try later .....
Run Code Online (Sandbox Code Playgroud)

在这一点上,我根本无法触摸数据库我尝试过的任何东西返回相同的错误消息Database …

sql-server database-restore database-backups sql-server-2008

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