Счетчик Oracle с функцией - PullRequest
2 голосов
/ 25 марта 2011

У меня есть SQL как это.

SELECT A.HESAP_NO, A.TEKLIF_NO1 || '/' || A.TEKLIF_NO2 AS TEKLIF
MV_K(A.TEKLIF_NO1,A.TEKLIF_NO2, A.DATE) AS KV
FROM S_TEKLIF A

Когда я хочу вычислить MV_K(A.TEKLIF_NO1,A.TEKLIF_NO2, A.DATE)/COUNT(@TEKLIF), но это не работает.

Я использую Oracle.

Как я могу разделить на Oracle, как это?

Вот мой полный код aspx;

<%@ Page Language="C#" AutoEventWireup="true"   %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Configuration" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Text" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<%@ Import Namespace="System.Web.UI.WebControls" %>
<%@ Import Namespace="System.Collections.Generic" %>
<%@ Import Namespace="System.Linq" %>
<%@ Import Namespace="System.Web" %>
<%@ Import Namespace="System.Web.UI" %>
<%@ Import Namespace="System.Collections" %>
<%@ Import Namespace="System.Data.OracleClient" %>

<%@ Register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="asp" %>

<script runat="server">
    protected void Page_Load(object sender, EventArgs e)
    {

        Calculate.Visible = false;

    }

    protected void Calculate_Click(object sender, EventArgs e)
    {
        Calculate.Visible = true;


       double sumMV = 0;
        foreach (GridViewRow gvr in GridView1.Rows)
        {
            CheckBox cb = (CheckBox)gvr.FindControl("NameCheckBoxField2");
            if (cb.Checked == true)
            {
                    double amount = Convert.ToDouble(gvr.Cells[9].Text);
                    sumMV += amount;

            }
        }

        GridView1.FooterRow.Cells[9].Text = String.Format("{0:n}", sumMV);

        double sumRISK = 0;
        foreach (GridViewRow gvr in GridView1.Rows)
        {
            CheckBox cb = (CheckBox)gvr.FindControl("NameCheckBoxField1");
            if (cb.Checked == true)
            {
                    double amount = Convert.ToDouble(gvr.Cells[7].Text);
                    sumRISK += amount;
            }
        }

        GridView1.FooterRow.Cells[7].Text = String.Format("{0:n}", sumRISK);

        double sumKV = 0;
        foreach (GridViewRow gvr in GridView1.Rows)
        {
            CheckBox cb = (CheckBox)gvr.FindControl("NameCheckBoxField3");
            if (cb.Checked == true)
            {
                double amount = Convert.ToDouble(gvr.Cells[11].Text);
                if (amount != -1)
                {
                    sumKV += amount;
                }
            }
        }
        GridView1.FooterRow.Cells[11].Text = String.Format("{0:n}", sumKV);

    }
    protected void SendToGridview_Click(object sender, EventArgs e)
    {
        DateTime dt_stb;

        Calculate.Visible = true;

        string strQuery = string.Empty;

        string ConnectionString = ConfigurationManager.ConnectionStrings["ora"].ConnectionString;

        OracleConnection myConnection = new OracleConnection(ConnectionString);

        string txtBoxText1 = ((TextBox)Page.FindControl("TextBox1")).Text;
        if (txtBoxText1 != "")
        {
            strQuery = @"SELECT A.HESAP_NO, A.TEKLIF_NO1 || '/' || A.TEKLIF_NO2 AS TEKLIF, A.MUS_K_ISIM AS MUSTERI, 
                    B.MARKA, C.SASI_NO, C.SASI_DURUM, D.TAS_MAR, NVL(RISK_SASI(A.TEKLIF_NO1, A.TEKLIF_NO2, C.URUN_SIRA_NO, C.SIRA_NO, :S_TARIH_B),0) AS RISK,
                    NVL(MV_SASI(A.TEKLIF_NO1, A.TEKLIF_NO2, C.SIRA_NO, C.URUN_SIRA_NO, :S_TARIH_B),0) AS MV,
                    MV_K(A.TEKLIF_NO1,A.TEKLIF_NO2, :S_TARIH_B)/COUNT(*) OVER() AS KV
                    FROM S_TEKLIF A,  S_URUN B, S_URUN_DETAY C, KOC_KTMAR_PR D
                    WHERE A.TEKLIF_NO1 || A.TEKLIF_NO2 = B.TEKLIF_NO1 || B.TEKLIF_NO2
                    AND A.TEKLIF_NO1 || A.TEKLIF_NO2 = C.TEKLIF_NO1 || C.TEKLIF_NO2
                    AND B.SIRA_NO = C.URUN_SIRA_NO
                    AND C.SASI_DURUM IN ('A','R')
                    AND B.DISTRIBUTOR = D.DIST_KOD
                    AND B.MARKA = D.MARKA_KOD
                    AND B.URUN_KOD = D.TAS_KOD ";

        }
        string param = "";
        foreach (ListItem l in CheckBoxList1.Items)
        {
            if (l.Selected)
            {
                param += string.Format("'{0}'", l.Value);
                param += ",";
            }
        }

        try
        {
            param = param.Remove(param.Length - 1);

            strQuery = strQuery + " AND A.HESAP_NO IN (" + param + ")";

            OracleCommand myCommand = new OracleCommand(strQuery, myConnection);
            myCommand.CommandType = System.Data.CommandType.Text;
            myCommand.Connection = myConnection;

            myCommand.CommandText = strQuery;
            dt_stb = DateTime.Parse(txtBoxText1);
            myCommand.Parameters.AddWithValue(":S_TARIH_B", dt_stb);

            myConnection.Open();

            OracleDataReader dr = myCommand.ExecuteReader(System.Data.CommandBehavior.CloseConnection);

            GridView1.DataSource = dr;
            GridView1.DataBind();
            GridView1.Visible = true;

            myConnection.Close();
        }
        catch
        {
            ScriptManager.RegisterClientScriptBlock(this, this.GetType(), " ", "alert('Choose at least one customer!')", true);
            Calculate.Visible = false;
            GridView1.Visible = false;
            TextBox1.Text = string.Empty;
        }

            double sumMV = 0;
            foreach (GridViewRow gvr in GridView1.Rows)
            {
                CheckBox cb = (CheckBox)gvr.FindControl("NameCheckBoxField2");
                if (cb.Checked == true)
                {
                    double amountMV = Convert.ToDouble(gvr.Cells[9].Text);


                        sumMV += amountMV;

                }
            }

            GridView1.FooterRow.Cells[9].Text = String.Format("{0:n}", sumMV);

            double sumRISK = 0;
            foreach (GridViewRow gvr in GridView1.Rows)
            {
                CheckBox cb = (CheckBox)gvr.FindControl("NameCheckBoxField1");
                if (cb.Checked == true)
                {
                    double amountBV = Convert.ToDouble(gvr.Cells[7].Text);


                        sumRISK += amountBV;

                }
            }

            GridView1.FooterRow.Cells[7].Text = String.Format("{0:n}", sumRISK);

            double sumKV = 0;
            foreach (GridViewRow gvr in GridView1.Rows)
            {
                CheckBox cb = (CheckBox)gvr.FindControl("NameCheckBoxField3");
                if (cb.Checked == true)
                {
                    double amountKV = Convert.ToDouble(gvr.Cells[11].Text);
                    if (amountKV != -1)
                    {
                        sumKV += amountKV;
                    }
                }
            }

            GridView1.FooterRow.Cells[11].Text = String.Format("{0:n}", sumKV);


    }
</script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <style type="text/css">

        #form1
        {
            height: 729px;
            width: 1083px;
        }

        .style1
        {
            width: 265px;
        }

      </style>
</head>
<body>
    <form id="form1" runat="server">
    <br />
    <img src="../images/Scania_Logo.gif" style="height: 49px; width: 193px" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    <asp:Label ID="Label1" runat="server" Font-Bold="True" Font-Size="X-Large" 
        ForeColor="Blue" Height="40px" Text="BV &amp; RISK SIMULATOR" 
        Width="329px" style="text-align: center"></asp:Label>
&nbsp;
    <asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
    </asp:ToolkitScriptManager>
    <br />
    <div style="OVERFLOW-Y:scroll; WIDTH:362px; HEIGHT:177px">
        <br />

    <table border="5" bordercolor=blue style="height: 116px; width: 343px">
    <tr>
    <td class="style1">
        <asp:CheckBoxList ID="CheckBoxList1" runat="server" 
            DataSourceID="ChechkBoxDataSource" DataTextField="MUS_K_ISIM" 
            DataValueField="HESAP_NO" Font-Size="12pt">
        </asp:CheckBoxList>
        </td>
        </tr>
    </table>
    </div>
    <div style="width: 331px">
        <br />
        <asp:Textbox ID="TextBox1" runat="server" Font-Size="X-Small" Height="13px" Font-Names="Verdana" Width="75px" ></asp:Textbox>   
        <asp:CalendarExtender Format="dd/MM/yyyy" ID="TextBox1_CalendarExtender" runat="server" 
            TargetControlID="TextBox1">
        </asp:CalendarExtender>
        <asp:Image ID="ImageButton3" runat="server"  ImageUrl="~/images/SmallCalendar.gif"/>
        <br />
       </div>
        <asp:SqlDataSource ID="ChechkBoxDataSource" runat="server" 
            ConnectionString="<%$ ConnectionStrings:ora %>" 
            ProviderName="<%$ ConnectionStrings:ora.ProviderName %>" 
            SelectCommand="SELECT DISTINCT(A.HESAP_NO),A.MUS_K_ISIM
FROM S_TEKLIF A
ORDER BY A.MUS_K_ISIM">
        </asp:SqlDataSource>
    <br />
    <asp:Button ID="SendToGridview" runat="server" Text="Calculate" Width="73px" 
        onclick="SendToGridview_Click" />
    <br />
    <br />
    <asp:GridView ID="GridView1" runat="server"  
         Width="16px" CellPadding="4" 
        GridLines="None" Height="16px" ForeColor="#333333" 
        AutoGenerateColumns="False" DataKeyNames="RISK,MV" BorderColor="White" 
        BorderStyle="Ridge" ShowFooter="True" >
        <AlternatingRowStyle BackColor="White" />
        <Columns>
        <asp:BoundField HeaderText="HESAP" DataField="HESAP_NO" />
     <asp:BoundField HeaderText="TEKLIF" DataField="TEKLIF" >
            <ItemStyle Wrap="False" />
            </asp:BoundField>
     <asp:BoundField HeaderText="MUSTERI" DataField="MUSTERI" >
            <ItemStyle Wrap="False" />
            </asp:BoundField>
     <asp:BoundField HeaderText="MARKA" DataField="MARKA" />
     <asp:BoundField HeaderText="SASI" DataField="SASI_NO" >
            <ItemStyle Wrap="False" />
            </asp:BoundField>
     <asp:BoundField HeaderText="DURUM" DataField="SASI_DURUM" />
     <asp:BoundField HeaderText="TASIT MARKA" DataField="TAS_MAR" >
            <ItemStyle Wrap="False" />
            </asp:BoundField>
     <asp:BoundField HeaderText="BV" DataField="RISK" DataFormatString="{0:n2}"/>


            <asp:templatefield headertext="">
            <itemtemplate>
            <asp:CheckBox DataField="NameCheckBoxField1" ID="NameCheckBoxField1" Checked="True" runat="server"></asp:CheckBox>
            </itemtemplate>
            </asp:templatefield>
            <asp:BoundField HeaderText="MV" DataField="MV" DataFormatString="{0:n2}"/>
            <asp:templatefield headertext="">
            <itemtemplate>
            <asp:CheckBox DataField="NameCheckBoxField2" ID="NameCheckBoxField2" Checked="True" runat="server"></asp:CheckBox>
            </itemtemplate>
            </asp:templatefield>
            <asp:BoundField HeaderText="KV" DataField="KV" DataFormatString="{0:n2}"/>
            <asp:templatefield headertext="">
            <itemtemplate>
            <asp:CheckBox DataField="NameCheckBoxField3" ID="NameCheckBoxField3" Checked="True" runat="server"></asp:CheckBox>
            </itemtemplate>
            </asp:templatefield>

        </Columns>
        <EditRowStyle BackColor="#2461BF" />
        <FooterStyle BackColor="#507CD1" ForeColor="White" Font-Bold="True" />
        <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
        <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
        <RowStyle BackColor="#EFF3FB" />
        <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
        <sortedascendingcellstyle backcolor="#F4F4FD" />
        <sortedascendingheaderstyle backcolor="#5A4C9D" />
        <sorteddescendingcellstyle backcolor="#D8D8F0" />
        <sorteddescendingheaderstyle backcolor="#3E3277" />

<SortedAscendingCellStyle BackColor="#F5F7FB"></SortedAscendingCellStyle>

<SortedAscendingHeaderStyle BackColor="#6D95E1"></SortedAscendingHeaderStyle>

<SortedDescendingCellStyle BackColor="#E9EBEF"></SortedDescendingCellStyle>

<SortedDescendingHeaderStyle BackColor="#4870BE"></SortedDescendingHeaderStyle>
  </asp:GridView>
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
        ConnectionString="<%$ ConnectionStrings:ora %>" 
        ProviderName="<%$ ConnectionStrings:ora.ProviderName %>" 

        SelectCommand="  SELECT A.HESAP_NO, A.TEKLIF_NO1 || '/' || A.TEKLIF_NO2 AS TEKLIF, A.MUS_K_ISIM , 
B.MARKA, C.SASI_NO, C.SASI_DURUM, D.TAS_MAR, NVL(RISK_SASI(A.TEKLIF_NO1, A.TEKLIF_NO2, C.URUN_SIRA_NO, C.SIRA_NO, :S_TARIH_B),0) AS RISK,
NVL(MV_SASI(A.TEKLIF_NO1, A.TEKLIF_NO2, C.URUN_SIRA_NO, C.SIRA_NO, :S_TARIH_B),0) AS MV,
MV_K(A.TEKLIF_NO1,A.TEKLIF_NO2, :S_TARIH_B)/COUNT(*) OVER() AS KV, 'NameCheckBoxField1' = 0x1, 'NameCheckBoxField2' = 0x1, 'NameCheckBoxField3' = 0x1
FROM S_TEKLIF A,  S_URUN B, S_URUN_DETAY C, KOC_KTMAR_PR D
WHERE A.TEKLIF_NO1 || A.TEKLIF_NO2 = B.TEKLIF_NO1 || B.TEKLIF_NO2
AND A.TEKLIF_NO1 || A.TEKLIF_NO2 = C.TEKLIF_NO1 || C.TEKLIF_NO2
AND B.SIRA_NO = C.URUN_SIRA_NO
AND C.SASI_DURUM IN ('A','R')
AND B.DISTRIBUTOR = D.DIST_KOD
AND B.MARKA = D.MARKA_KOD
AND B.URUN_KOD = D.TAS_KOD ">
    </asp:SqlDataSource>
    <br />
    <asp:Button ID="Calculate" runat="server" onclick="Calculate_Click" 
        Text="Calculate" />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    <br />
    <br />
    </form>
</body>
</html>

Ответы [ 2 ]

5 голосов
/ 25 марта 2011

Очевидно, что не проверено, но это должно быть что-то вроде:

SELECT A.HESAP_NO
     , A.TEKLIF_NO1 || '/' || A.TEKLIF_NO2 AS TEKLIF
     , MV_K(A.TEKLIF_NO1,A.TEKLIF_NO2, A.DATE) / count(*) over () AS KV
  FROM S_TEKLIF A

Объяснение: если вы хотите использовать count (*), вам придется агрегировать в запросе, но вы этого не делаететот.Таким образом, вместо этого вы можете использовать аналитическую функцию count (*) over (), которая подсчитывает одно и то же число для каждой строки.

Надеюсь, это поможет.

1 голос
/ 25 марта 2011

Я думаю, вам нужно лучше объяснить, что вы рассчитываете в своем примере. Ваш запрос показывает значения, которые возвращаются для каждой строки, а затем вы хотите разделить на "COUNT (@TEKLIF)"

означает ли это обозначение количество различных ТЕКЛИФОВ? Или количество строк для ТЕКЛИФ в этом ряду? Или количество всех строк в таблице?

например.)

SELECT   A.HESAP_NO      
       , A.TEKLIF_NO1 || '/' || A.TEKLIF_NO2 AS TEKLIF      
       , MV_K(A.TEKLIF_NO1,A.TEKLIF_NO2, A.DATE) / count(distinct TEFLIK) over () AS KV   
FROM S_TEKLIF A 

или

SELECT   A.HESAP_NO      
       , A.TEKLIF_NO1 || '/' || A.TEKLIF_NO2 AS TEKLIF      
       , MV_K(A.TEKLIF_NO1,A.TEKLIF_NO2, A.DATE) / count(*) over (partition by TEFLIK) AS KV   
FROM S_TEKLIF A 

или решение Роба

Надеюсь, что это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...