<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://www.dotnetzone.gr:443/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>SQL Server (και άλλες databases)</title><link>https://www.dotnetzone.gr:443/cs/forums/28/ShowForum.aspx</link><description>Θέματα που αφορούν τον SQL Server (7.0, 2000, 2005) αλλά και Oracle, Access, DB2, MySQL, κλπ.</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Απ:Pivoting Tables σε SQL 2000</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/3844.aspx</link><pubDate>Wed, 27 Jul 2005 15:05:11 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:3844</guid><dc:creator>George J. Capnias</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/3844.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=3844</wfw:commentRss><description>&lt;P&gt;Επειδή πολλές διαδικασίες γινόντουσαν πολύπλοκες με το υπάρχων schema, ξανασχεδίασα όλο το τμήμα των καταλόγων από την αρχή, για να αποφύγω&amp;nbsp;το πρόβλημα, και&amp;nbsp;ξέθαψα την ύλη που είχα διαβάσει παλιά για τους καταλόγους.&lt;/P&gt;
&lt;P&gt;Μόλις τελειώσω με την σχεδίαση θα σας την δείξω, ως παράδειγμα για αναφορά&lt;/P&gt;
&lt;P&gt;George J.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Απ:Pivoting Tables σε SQL 2000</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/3832.aspx</link><pubDate>Tue, 26 Jul 2005 23:49:59 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:3832</guid><dc:creator>cap</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/3832.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=3832</wfw:commentRss><description>&lt;P&gt;Να συμπληρώσω απλά οτι θα μπορούσες να παρακάμψεις τη διαδικασία insert/update κάνοντας απευθείας insert στον temp table με κάποιον πιό έξυπνο τρόπο. Περισσότερο το έκανα για να φανεί τι ήθελα να κάνω. Το 10000 που βάζω είναι dummy τιμή, σε περίπτωση όμως που χρειαστείς πολλαπλά προϊόντα (1 row για το καθένα) ίσως έχει νόημα ως identifier.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Απ:Pivoting Tables σε SQL 2000</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/3831.aspx</link><pubDate>Tue, 26 Jul 2005 14:55:05 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:3831</guid><dc:creator>cap</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/3831.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=3831</wfw:commentRss><description>&lt;P&gt;Εεε τότε κάτσε να σου δώσω και το script του test table που χρησιμοποιησα να μην παιδεύεσαι.&lt;/P&gt;
&lt;P&gt;CREATE TABLE [TEST] (&lt;BR&gt;&amp;nbsp;[id] [int] IDENTITY (1, 1) NOT NULL ,&lt;BR&gt;&amp;nbsp;[catalogitemid] [int] NULL ,&lt;BR&gt;&amp;nbsp;[catalogid] [int] NULL ,&lt;BR&gt;&amp;nbsp;[quantity] [int] NULL ,&lt;BR&gt;&amp;nbsp;[price] [decimal](10, 2) NULL ,&lt;BR&gt;&amp;nbsp;[startdate] [datetime] NULL ,&lt;BR&gt;&amp;nbsp;CONSTRAINT [PK_TEST] PRIMARY KEY&amp;nbsp; CLUSTERED &lt;BR&gt;&amp;nbsp;(&lt;BR&gt;&amp;nbsp;&amp;nbsp;[id]&lt;BR&gt;&amp;nbsp;)&amp;nbsp; ON [PRIMARY] &lt;BR&gt;) ON [PRIMARY]&lt;BR&gt;GO&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Απ:Pivoting Tables σε SQL 2000</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/3830.aspx</link><pubDate>Tue, 26 Jul 2005 14:52:51 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:3830</guid><dc:creator>George J. Capnias</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/3830.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=3830</wfw:commentRss><description>&lt;P&gt;Το τσεκάρω αν μου δουλέυει και σου λέω...&lt;/P&gt;
&lt;P&gt;George J.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Απ:Pivoting Tables σε SQL 2000</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/3827.aspx</link><pubDate>Tue, 26 Jul 2005 11:58:19 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:3827</guid><dc:creator>cap</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/3827.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=3827</wfw:commentRss><description>&lt;P&gt;&lt;FONT face=Tahoma size=2&gt;Και αμα σου δωσω εγώ ακόμα χειρότερη λύση τύπου "Σωτήρη"; :)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Tahoma size=2&gt;Εχω ένα τραπέζι που έχει τα πεδία σου όπως τα θέλεις. Η λύση δουλεύει μόνο για ένα προϊόν τη φορά και παράγει ένα resultset που έχει τα εξής πεδία: Ενα dummy πεδίο στην αρχή σαν pk, και μετα, q1, p1, q2, p2 κλπ οπου q=quantity, p=price&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Το κοίταξα απλά να δουλεύει και δουλεύει, θέλει πολλές βελτιώσεις, είναι όμως αργά και ...βαριέμαι :) Απλά μήπως σου δώσω καμμιά ιδέα. &lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT face="Courier New" size=2&gt;declare @cnt int&amp;nbsp;--Holds the number of rows we will find for a specific product&lt;BR&gt;declare @curr int &amp;nbsp;--Current position indicator&lt;BR&gt;set @curr=1&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;--Create a temp table with at least one field&lt;BR&gt;create table #a (someid int&amp;nbsp; primary key)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;--Get the number of rows. No special WHERE clauses here, put your own. &lt;BR&gt;select @cnt=count(quantity) &lt;BR&gt;from test &lt;BR&gt;where catalogid=1 and catalogitemid=1&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;--Sql string for quantity field&lt;BR&gt;declare @field1sql varchar(8000)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;--Sql string for price field&lt;BR&gt;declare @field2sql varchar(8000)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;--String for inserting data to the temp table&lt;BR&gt;declare @insertsql varchar(8000)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;set @insertsql='insert into #a values (10000,'&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;--Create as many columns in the temp table as rows found in the main table&lt;BR&gt;while @curr&amp;lt;&lt;/FONT&gt;&lt;A href="mailto:=@cnt"&gt;&lt;FONT face="Courier New" size=2&gt;=@cnt&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;&lt;FONT face="Courier New" size=2&gt;begin&lt;BR&gt;&amp;nbsp;set @field1sql='alter table #a add q' + convert(varchar(2),@curr)+' int null'&lt;BR&gt;&amp;nbsp;set @field2sql='alter table #a add p' + convert(varchar(2),@curr)+' decimal(10,2) null'&lt;BR&gt;&amp;nbsp;&lt;BR&gt;&amp;nbsp;--Construct a dummy insert sql string&amp;nbsp;&lt;BR&gt;&amp;nbsp;set @insertsql=@insertsql+'1,1,'&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;exec (@field1sql)&lt;BR&gt;&amp;nbsp;exec (@field2sql)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;set @curr = @curr+1&lt;BR&gt;end&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;--Now insert dummy values to the one and only row of the temp table&lt;BR&gt;set @insertsql=left(@insertsql, len(@insertsql)-1) + ')'&lt;BR&gt;exec (@insertsql)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;declare @q int&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;--Quantity variable&lt;BR&gt;declare @p decimal(10,2)&amp;nbsp;&amp;nbsp;--Price variable&lt;BR&gt;declare @cnt2 int&amp;nbsp;&amp;nbsp;&amp;nbsp;--Counter&lt;BR&gt;declare @updatesql varchar(8000)&amp;nbsp;--Update sql statement which will contain actual vals&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;set @cnt2=1&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;declare cur cursor for&lt;BR&gt;&amp;nbsp;select quantity, price &lt;BR&gt;&amp;nbsp;from test &lt;BR&gt;&amp;nbsp;where catalogid=1 and catalogitemid=1&lt;BR&gt;open cur&lt;BR&gt;fetch next from cur into @q, @p&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;while @@fetch_status=0&lt;BR&gt;begin&lt;BR&gt;set @updatesql='update #a set q' + &lt;BR&gt;&amp;nbsp;convert(varchar(2), @cnt2) &lt;BR&gt;&amp;nbsp;+ '='+convert(varchar(10), @q) &lt;BR&gt;&amp;nbsp;+ ',p' + convert(varchar(2), @cnt2) &lt;BR&gt;&amp;nbsp;+ '='+convert(varchar(10), @p)&lt;BR&gt;exec (@updatesql)&lt;BR&gt;fetch next from cur into @q, @p&lt;BR&gt;set @cnt2=@cnt2+1&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;end&lt;BR&gt;close cur&lt;BR&gt;deallocate cur&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;--Yes, I know, but no quicker way!&lt;BR&gt;select * from #a&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;drop table #a&lt;BR&gt;&lt;/FONT&gt;&lt;/P&gt;</description></item><item><title>Απ:Pivoting Tables σε SQL 2000</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/3826.aspx</link><pubDate>Tue, 26 Jul 2005 08:31:22 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:3826</guid><dc:creator>George J. Capnias</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/3826.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=3826</wfw:commentRss><description>&lt;P&gt;Η αλήθεια είναι τώρα που το βλέπω καλύτερα, σαν λύση βλέπω, τεχνικές τύπου "&lt;EM&gt;Σωτήρη&lt;/EM&gt;", να το κάνω comma delimeted string ανά οριζόντια γραμμή, και μετά να το κάνω split και να το γυρνάω κατακόρυφα...&lt;/P&gt;
&lt;P&gt;...&amp;nbsp;ή να το κάνω με temp πίνακα;&lt;/P&gt;
&lt;P&gt;George J.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Απ:Pivoting Tables σε SQL 2000</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/3825.aspx</link><pubDate>Tue, 26 Jul 2005 08:21:58 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:3825</guid><dc:creator>George J. Capnias</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/3825.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=3825</wfw:commentRss><description>&lt;P&gt;Ο πίνακας είναι της μορφής:&lt;/P&gt;
&lt;P&gt;-itemprice_id: int identity&lt;BR&gt;-itemprice_catalogitemid: int FK στον πίνακα catalogitems που είναι όλα τα προιόντα προς πώληση&lt;BR&gt;-itemprice_catalodid: int FK στον πίνακα catalogs που είναι πιθανοί κατάλογοι (Χονδρική, Λιανική, κοκ)&lt;BR&gt;-itemprice_quantity: int&lt;BR&gt;-itemprice_price: decimal&lt;BR&gt;-itemprice_startdate: datetime&lt;/P&gt;
&lt;P&gt;Έστω τα πιθανά data:&lt;/P&gt;
&lt;P&gt;1, 1, 1, 1, 10.00, 1/8/05&lt;BR&gt;1, 1, 1, 2, 9.00, 1/8/05&lt;BR&gt;1, 1, 1, 5, 8.00, 10/8/05&lt;BR&gt;1, 1, 1, 10, 7.00, 10/8/05&lt;BR&gt;1, 1, 1, 20, 6.00, 15/8/05&lt;BR&gt;1, 1, 1, 1, 10.50, 1/7/05&lt;BR&gt;1, 1, 1, 2, 9.50, 10/7/05&lt;BR&gt;1, 1, 1, 5, 8.50, 15/7/05&lt;BR&gt;1, 1, 1, 10, 7.50, 20/7/05&lt;BR&gt;1, 1, 1, 20, 6.50, 25/7/05&lt;/P&gt;
&lt;P&gt;Για συγκεκριμένο κατάλογο προιόντων (itemprice_catalogid) θα πρέπει να μπορώ για συγκεκριμένο προιόν (itemprice_catalogitemid) να δω τα παραπάνω δεδομένα έτσι:&lt;BR&gt;&lt;BR&gt;itemprice_catalogitemid, 1, 2, 5, 10, 20&lt;BR&gt;itemprice_catalogitemid, 10.50, 9.50, 8.50, 7.50, 0 (προσοχή δεν υπάρχει τιμή για τα 20 αν η σύγκριση της ημερομηνίας ισχύος της&amp;nbsp;τιμής&amp;nbsp;γίνει με το getdate())&lt;/P&gt;
&lt;P&gt;Ναι το παραπάνω SQL είναι σωστό, αλλά δεν μπορώ να το χρησιμοποιήσω κάτι τέτοιο στην περίπτωσή μου γιατί δεν ξέρω των αριθμό των περιπτώσεων των διαφορετικών ποσοτήτων που θα υπάρχουν. Δεν θέλω ένα pivot table, αλλά να κάνω pivoting σε ένα table που δεν ξέρω τον αριθμό των γραμμών του...&lt;/P&gt;
&lt;P&gt;Η Oracle έχει έτοιμη τέτοια συνάρτηση και ο SQL 2005. Το πρώτο&amp;nbsp;μπορώ να το χρησιμοποιήσω, το δεύτερο πρέπει να περιμένω μέχρι, τουλάχιστον, τις 7 Νοεμβρίου.&lt;/P&gt;
&lt;P&gt;George J.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Απ:Pivoting Tables σε SQL 2000</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/3821.aspx</link><pubDate>Tue, 26 Jul 2005 03:36:58 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:3821</guid><dc:creator>Aris</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/3821.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=3821</wfw:commentRss><description>&lt;P&gt;Δηλαδή, από ένα πίνακα &lt;STRONG&gt;&lt;EM&gt;PriceChanges&lt;/EM&gt;&lt;/STRONG&gt; της μορφής:&lt;BR&gt;&lt;FONT face="Courier New" size=2&gt;- ChangeDate: datetime&lt;BR&gt;- ProductID: int&lt;BR&gt;- NewPrice: money&lt;BR&gt;- ValidForUnitsAbove: int&lt;BR&gt;&lt;/FONT&gt;όπου η τιμή πώλησης είναι η πλέον πρόσφατη με την ποσότητα να πέφτει μέσα στα όρια;&lt;BR&gt;Δηλαδή, κάνεις ένα &lt;BR&gt;&amp;nbsp;&lt;FONT face="Courier New" size=2&gt;SELECT TOP 1 NewPrice FROM PriceChanges WHERE (ProductID = ? AND ? &amp;gt;= ValidForUnitsAbove) ORDER BY ProductID, ValidForUnitsAbove DESC, ChangeDate DESC&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Ερωτήσεις:&lt;BR&gt;1. Είναι σωστό το παραπάνω;&lt;BR&gt;2. Οι στήλες του νέου πίνακα, ποιές είναι;&lt;/P&gt;
&lt;P&gt;Άρης&lt;/P&gt;</description></item><item><title>Pivoting Tables σε SQL 2000</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/3811.aspx</link><pubDate>Mon, 25 Jul 2005 23:12:52 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:3811</guid><dc:creator>George J. Capnias</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/3811.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=3811</wfw:commentRss><description>&lt;P&gt;Ήμουν σίγουρος ότι μπορούσα να τα καταφέρω, αλλά έφαγα όλο το πρωινό μου και δεν κατάφερα να κάνω κάτι. Και από μερικά search από δω και από κει στο Internet, δεν βρήκα κάτι της προκοπής.&lt;/P&gt;
&lt;P&gt;Ο λόγος&amp;nbsp;γίνεται&amp;nbsp;για&amp;nbsp;ένα κατάλογο τιμών προϊόντων. Κάθε τιμή που αντιστοιχεί σε ένα προϊόν, έχει να κάνει και με τον αριθμό των κομματιών που πωλούνται και με την ημερομηνία έναρξης ισχύος της τιμής.&lt;/P&gt;
&lt;P&gt;Εύκολο αυτό, το γράφουμε οριζόντια μέσα σε ένα πίνακα. Τώρα, το ζητούμενο είναι να το δούμε κάθετα, δηλαδή να κάνουμε τις γραμμές στήλες, ώστε να είναι πιο εύκολα τα δεδομένα στην ανάγνωση. Ο αριθμός των γραμμών δεν είναι σταθερός, μιας και κάθε προιόν έχει διαφορετικές μεταβολές στις ποσότητες που αλλάζει η τιμή του, και θέλουμε να μπορούμε να βάζουμε δίπλα από κάθε στήλη, μια δεύτερη στήλη με την προηγούμενη τιμή που ίσχυε για το προιόν.&lt;/P&gt;
&lt;P&gt;Παλιά που δούλευα καταλόγους μέσα σε εφαρμογές, είμαι σίγουρος ότι το είχα κάνει, αλλά τώρα έχω κολλήσει ανεπανόρθωτα.&lt;/P&gt;
&lt;P&gt;Κάποιος να βοηθήσει;&lt;/P&gt;
&lt;P&gt;George J.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item></channel></rss>