小编Max*_*eek的帖子

T-SQL子查询最大(日期)和联接

我正在尝试连接多个表,但其中一个表有一个具有不同日期的partid的多个记录.我希望得到最近日期的记录.

以下是一些示例表:

Table: MyParts
Partid   Partnumber   Description
1        ABC-123      Pipe
2        ABC-124      Handle
3        ABC-125      Light


Table: MyPrices
Partid   Price        PriceDate
1        $1           1/1/2005
1        $2           1/1/2007
1        $3           1/1/2009
2        $2           1/1/2005
2        $4           1/1/2006
2        $5           1/1/2008
3        $10          1/1/2008
3        $12          1/1/2009
Run Code Online (Sandbox Code Playgroud)

如果我只是想找到某个部分的最新价格,我可以做:

SELECT * FROM MyPrice WHERE PriceDate = (SELECT MAX(PriceDate) 
FROM MyPrice WHERE Partid = 1)
Run Code Online (Sandbox Code Playgroud)

但是我想首先加入,然后为所有部分而不是一个部分找回正确的价格.这是我尝试过的:

SELECT * FROM MyParts LEFT JOIN MyPrice ON MyParts.Partid = MyPrice.Partid WHERE 
MyPart.PriceDate = (SELECT MAX(PriceDate) FROM MyPrice) …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server join subquery

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

SSIS脚本组件写入变量

这是SQL 2005.

我在数据流任务中有一个脚本组件.我想从输入列读取并将数据写入全局用户变量.

我已经设置了我的输入列,并将我的全局用户变量作为ReadWriteVariable添加到脚本组件属性中.

这是我的代码,我只是想在这里改变全局用户变量的值,但它不起作用.当我在另一个任务中写出变量的值时,它仍然具有默认值:

Imports System
Imports System.Data
Imports System.Math
Imports Microsoft.SqlServer.Dts.Runtime
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper

Public Class ScriptMain
    Inherits UserComponent
    Dim updateSQL As String

    Public Sub Main()
        Dim vars As IDTSVariables90

        VariableDispenser.LockOneForWrite("SQL_ATTR_Update", vars)
        vars("SQL_ATTR_Update").Value = "Test"
        vars.Unlock()
    End Sub


    Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
        'updateSQL = Row.ITMID + Row.PRCCAT
    End Sub

End Class
Run Code Online (Sandbox Code Playgroud)

我也试过没有运气:

Me.ReadWriteVariables("SQL_ATTR_Update").Value = "Test" 
Run Code Online (Sandbox Code Playgroud)

ssis sql-server-2005

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

SQL查询帮助桥表

我正在使用现有数据库并尝试编写SQL查询以获取所有帐户信息,包括权限级别.这是用于安全审计.我们希望以可读的方式转储所有这些信息,以便于比较.我的问题是有一个权限的桥/链接表,所以每个用户有多个记录.我希望在一行中获得一个用户的所有权限.这是一个例子:

Table_User:
UserId   UserName
1        John
2        Joe
3        James

Table_UserPermissions:
UserId   PermissionId   Rights
1        10             1
1        11             2
1        12             3
2        11             2
2        12             3
3        10             2
Run Code Online (Sandbox Code Playgroud)

PermissionID链接到一个具有Permission名称及其功能的表.对象就像1 =视图,2 =修改等.

我从用户1的基本查询中得到的是:

UserId UserName PermissionId Rights
1      John     10           1
1      John     11           2
1      John     12           3
Run Code Online (Sandbox Code Playgroud)

我想要的是这样的:

UserId UserName Permission1 Rights1 Permission2 Right2 Permission3 Right3
1      John     10          1       11          2      12          3
Run Code Online (Sandbox Code Playgroud)

理想情况下,我希望所有用户都这样.我发现最接近的是SQL Server 2005中的Pivot函数.http: //geekswithblogs.net/lorint/archive/2006/08/04/87166.aspx 从我能说的这个问题是我需要的为每个用户命名每列,我不知道如何获得权限级别.使用真实数据,我有大约130个用户和40个不同的权限.

有没有另外一种方法只有sql,我可以做到这一点?

sql sql-server pivot

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

SQL从表中排除LIKE项

我正试图弄清楚如何使用表B中的排除列表从表A中的select语句中排除项目.问题是我根据字段的前缀排除.

所以一个字段值可能是"FORD Muffler"并将其排除在基本查询之外:

SELECT FieldName 
FROM TableName 
WHERE UPPER(ColumnName) NOT LIKE 'FORD%'
Run Code Online (Sandbox Code Playgroud)

但是要使用值列表从不同的表格中排除我会使用子查询,如:

SELECT FieldName 
FROM TableName 
WHERE UPPER(ColumnName) NOT IN (Select FieldName2 FROM TableName2)
Run Code Online (Sandbox Code Playgroud)

问题是它只排除完全匹配而不是LIKE或通配符(%).

我怎样才能完成这项任务?重新设计表不是一个选项,因为它是一个正在使用的现有表.

编辑:对不起,我正在使用SQL Server(2005).

sql subquery

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

SQL 2005 Reporting Services,如果检查为null

在SSRS 2005中,我有一个表格,其中包含与之链接的数据集.我想检查一个字段的值是否为null,如果它不是null,则格式化数据以确保它有一个小数位并添加%符号等.

这是我在字段/列上的表达式:

=iif(IsNothing(Fields!COL01.Value), "" ,Format(CDbl(Trim(Replace(Fields!COL01.Value, "%", ""))), "N1") + "%")
Run Code Online (Sandbox Code Playgroud)

当数据为空时它似乎不起作用(如果有数据,它可以正常工作).报告显示但该字段显示为#ERROR.

我认为它检查两个案例是否有效,即使它是null.我正在尝试使用if语句来避免格式​​化null.

sql-server-2005 reportingservices-2005 reporting-services

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

C#异常处理继续出错

我有一个基本的C#控制台应用程序,它逐行读取文本文件(CSV格式)并将数据放入HashTable.该行中的第一个CSV项是键(id num),该行的其余部分是值.但是我发现我的导入文件有一些不应该有的重复键.当我尝试导入文件时,应用程序错误,因为您不能在HashTable中有重复的键.我希望我的程序能够处理此错误.当我遇到一个重复的密钥时,我想将该密钥放入一个arraylist并继续将其余的数据导入到哈希表中.我怎么能在C#中做到这一点

这是我的代码:


private static Hashtable importFile(Hashtable myHashtable,String myFileName){

        StreamReader sr = new StreamReader(myFileName);
        CSVReader csvReader = new CSVReader();
        ArrayList tempArray = new ArrayList();
        int count = 0;

        while (!sr.EndOfStream)
        {
            String temp = sr.ReadLine();
            if (temp.StartsWith(" "))
            {
                ServMissing.Add(temp);
            }
            else
            {
                tempArray = csvReader.CSVParser(temp);
                Boolean first = true;
                String key = "";
                String value = "";

                foreach (String x in tempArray)
                {
                    if (first)
                    {
                        key = x;
                        first = false;
                    }
                    else
                    {
                        value += x + …
Run Code Online (Sandbox Code Playgroud)

c# csv exception

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

SQL Query将列结果放入行中

我正在使用报告服务来制作报告图表.但是我的数据看起来像这样:

Table1
    C01    C02   C03   C04
    1      2     3     4

I need to do a sql query to return data that looks like this:
    Any_Col_name
    1
    2
    3
    4
Run Code Online (Sandbox Code Playgroud)

我正在使用带有Oracle DB的MS Reporting Services.我不能重组这张桌子.

sql service reporting

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

使用Access SQL查询删除小数位数

我正在使用MS Access做一些数学运算.我花了一个成本并用十进制值除以得到一个价格.我正在使用链接表和访问SQL查询.

SQL Ex

Select (cost/markup) As Price From T_Cost;
Run Code Online (Sandbox Code Playgroud)

Calulcation Ex.1234/.55 = 2243.6363 1000/.50 = 2000

我试图找出一种方法来删除当有小数时和没有小数位时将起作用的小数位.

我想在我的Access SQL中做这样的事情:

Mid("2243,6363", 0, Instr("2243,6363","."))
Run Code Online (Sandbox Code Playgroud)

但如果没有小数位,这将不起作用.

sql ms-access decimal

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