【问题标题】:Need SQL Server Stored Procedure for This Query需要此查询的 SQL Server 存储过程
【发布时间】:2011-02-22 15:38:33
【问题描述】:

我有一个 ASPX.NET DataGrid,我试图从一个表中使用 select LIKE 'X'%,该表有一个名为 location 的字段。我试图在我的数据网格的不同列中显示以某个字母开头的位置(例如 wxxx、axxx、fxxx)。

我正在尝试使用如下所示的 SP 在我的数据网格中显示多于 1 列。问题是表 locationMaster 只有一个名为 location 的字段。字段 Location 具有以不同字母开头的可变位置编号(例如 w1002、w1003、00159、00526)。我想做的是使用 sp 在我的数据网格的一列中显示 wxxxx 位置,在另一列中显示 0xxxx 位置。如果我只是简单地运行

SELECT DISTINCT 
    LM.LOCATION AS 'LOCATIONS', 
    LM.COUNTLEVEL AS 'COUNTLEVEL' 
FROM  
    SOH S WITH(NOLOCK)  
JOIN LOCATIONMASTER LM ON LM.LMID = S.LMID 
WHERE 
    LM.COUNTLEVEL = 1 
    AND LM.LOCATION NOT IN ('RECOU','PROBLEM','TOSTOCK','PYXVLOC')

我的数据网格只有 1 列包含所有位置,页面会很长 如果我能以某种方式在 sp 中使用 LIKE 'W%' AND LIKE '0%' 并创建两列

SELECT
  DISTINCT LM.LOCATION AS '0 LOCATIONS' ,
    LM.COUNTLEVEL AS 'COUNTLEVEL'
FROM  SOH S WITH(NOLOCK)
  JOIN LOCATIONMASTER LM ON LM.LMID = S.LMID
WHERE
   LM.COUNTLEVEL = 1 AND
   LM.LOCATION NOT IN ('RECOU','PROBLEM','TOSTOCK','PYXVLOC')
   AND LM.LOCATION LIKE '0%'

SELECT
   DISTINCT LM.LOCATION AS 'A LOCATIONS' ,
   LM.COUNTLEVEL AS 'COUNTLEVEL'
FROM  SOH S WITH(NOLOCK)
  JOIN LOCATIONMASTER LM ON LM.LMID = S.LMID
WHERE
   LM.COUNTLEVEL = 1 AND
   LM.LOCATION NOT IN ('RECOU','PROBLEM','TOSTOCK','PYXVLOC')
   AND LM.LOCATION LIKE 'A%'**

这是我的数据网格代码

<Columns>
    <asp:BoundColumn DataField="COUNTLEVEL" Visible="false"/>
    <asp:TemplateColumn HeaderText="LOCATION">
       <ItemTemplate>
          <a href='confirmRecount.aspx?Var=<%# DataBinder.Eval(Container.DataItem ,"0 LOCATIONS")%>'>
          <%# DataBinder.Eval(Container.DataItem, "0 LOCATIONS")%>
          </a>
       </ItemTemplate>
    </asp:TemplateColumn>
</Columns>

【问题讨论】:

  • @Adam 问题发布在帖子顶部。对不起,如果你不明白这个问题。让我知道是否需要更具描述性。
  • ... 真奇怪,我之前的评论被删除了。 (可以说是明智的,因为这是对亚当删除评论的回应)。尽管如此,应该将其删除有点奇怪。我认为它是一个模组吗?无论如何,我仍然想确保这篇文章不会因为与之前发布的问题(不必要地关闭)的重复而关闭。
  • @silky 同意...问题发布在帖子顶部。对不起,如果你不明白这个问题。让我知道是否需要更具描述性
  • 您确实需要更具描述性。意义重大。

标签: sql-server stored-procedures datagrid asp.net


【解决方案1】:

您想要做的不是真正合乎逻辑的,一行中的数据与该行中的其他数据相关,这无法通过简单的 SQL 选择来完成。假设您有一个 2 行的小桌子:

**LOCATION**         **COUNTLEVEL**
   W1234                  10
   A7654                  23

现在您要对其进行转换,使 W1234 和 A7654 位于 2 个不同的列中。计数级别字段会发生什么。然后,您将有 1 行与您的列,并且您将有 2 个计数级别不再与它们各自的行相关,它们现在将与不同的列相关,计数级别列中会出现什么?所以你必须尝试做这样的事情:

**LOCATION A**  **COUNTLEVELA**   **LOCATION W**   **COUNTLEVELW**
    NULL             NULL              W1234             10   
   A7654             23                 NULL            NULL 

但我认为这不会有任何用处。

您可以将垂直行投影到水平列的唯一方法是 PIVOT 但是您最终得到的是来自一个字段的值成为列标题,而来自另一个字段的值成为您的行,因此您将拥有如下所示的内容:

                  **W1234**            **A7654**
LOCATION COUNT      10                    23

但是,在您的情况下,这只会使您的网格视图具有一行和多列,实际上,要使这很有用,您需要第三个变量来按垂直方向分组,例如部门。

如果您只是想获得数据网格在页面上占用的垂直空间量,您可以只使用 2 个数据网格并让 SP 返回 2 个数据集,然后在 2 个数据中匹配行上的数据网格不会以任何方式相互关联。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    • 2015-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多